2010-02-14 2 views
1

Я сохраняю данные JSON в качестве ответа в веб-службе, которую я пишу.Использование данных JSON в функции javascript

Мне интересно, как лучше всего использовать данные, возвращенные функции Javascript (переданные в качестве аргумента).

Do I:

  1. использование Eval()
  2. использование Doug Crawfords JSon анализатор для анализа данных JSON в объект Javascript
  3. просто использовать полученные данные в виде литерала объекта

BTW, я все еще изучаю Javascript, (только начал читать Окончательное руководство 2 дня назад), поэтому, если мой вопрос кажется немного наивным или asinine - медведь со мной.

ответ

2

Я хотел бы предложить несколько вещей, во-первых, на стороне веб-службы:

  1. Если параметр callback=functionName передается в строке запроса, а затем вернуть правильно сериализованную JSON в качестве единственного параметра для функция обратного вызова (в данном случае functionName
  2. Если нет обратного вызова не было предложено, то просто вернуть правильно сериализованную строку JSON. (Это полезно, когда другие языки потребляют JSON. PHP или рубин, например)

Затем, если вы используете тот же домен, что и веб-сервис, вы можете получить код и использовать json2.js parser для его анализа. Если вы находитесь в отдельном домене, используйте параметр callback при запросе данных и убедитесь, что вы настроили функцию обработки обратного вызова.

Простой пример (с помощью PHP):

<?php 
    $callback = null; 
    if(isset($_REQUEST['callback'])){ 
    $callback = $_REQUEST['callback']; 
    } 

    $fakeData = array('key' => 'value'); 
    $json  = json_encode($fakeData); 

    echo $callback ? "$callback($json)" : $json; 
?> 

JS (в другом домене, чем веб-службы):

function handleCallback(data){ 
    alert(data.key); 
} 

function get_json(){ 
    // Dynamically create the script element 
    var script = document.createElement('script'); 
    script.type = "text/javascript"; 
    script.src = "http://yourwebservice.com/service/?callback=handleCallback"; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 

Вызов get_json будет динамически создать запрос (как скриптовый элемент из-за ограничений перекрестных доменов. Вы не можете использовать XMLHttpRequest для перекрестных доменных запросов в большинстве браузеров), а PHP-скрипт будет исправлен y вызовите функцию handleCallback при возврате сценария.

+2

Последние версии всех основных браузеров поддерживают родной JSON, поэтому скрипты должны проверять его перед загрузкой json2.js. –

0

Предполагая, что ваш веб-сервис украшен атрибутом ScriptService: Я бы предложил использовать json2.js для обработки клиентов json. Он отказывается от исходных реализаций, когда они доступны.

0

(1). use eval()

Только если вы уверены, что данные чистые. Я никогда не доверял бы чему-либо из внешнего источника.

(2).используйте парсер Doug Crawfords jSon для анализа данных JSON в объект Javascript

Лучшая идея в целом. Даже jQuery использует простой старый eval() для разбора JSON.

(3). просто используйте возвращаемые данные как литерал объекта

Когда он возвращается, это просто строка, а не объект, если она не передана через одну из двух вышеупомянутых функций, или не завернута в функцию ala JSONP.

+0

@bdl «Даже jQuery использует простой старый eval() для разбора JSON» неверен как из jQuery 1.4 –

+0

@Doug> Спасибо за разъяснение. Изменить: по-видимому, они не изменили документы API, потому что он по-прежнему утверждает, что использует eval(). – bdl