Я хотел бы предложить несколько вещей, во-первых, на стороне веб-службы:
- Если параметр
callback=functionName
передается в строке запроса, а затем вернуть правильно сериализованную JSON в качестве единственного параметра для функция обратного вызова (в данном случае functionName
- Если нет обратного вызова не было предложено, то просто вернуть правильно сериализованную строку 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
при возврате сценария.
Последние версии всех основных браузеров поддерживают родной JSON, поэтому скрипты должны проверять его перед загрузкой json2.js. –