Междоменный запрос JSON?
Вопрос:
Я пытаюсь использовать JSON через домены, но все, что я нахожу, это парсеры JSON, которые мне не нужны...
Я читал, что можно выполнять междоменные запросы с помощью JSON,
но до сих пор все, что я вижу, это реализации, которые используют XMLHttpRequest...
- что означает, что вы не можете использовать междоменные запросы, по крайней мере, не за пределами IE 8...
Я был на http://www.json.org/, но все, что я нахожу, это либо синтаксические анализаторы, либо бесполезные.
Лучшее, что я нашел с Google до сих пор
http://devpro.it/JSON/files/JSONRequest-js.html
но это скорее беспорядок, не работает кросс-домен, а внутридомен - ни вернее, ни вообще...
var the_object = {};
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.onreadystatechange = function () {
if ( http_request.readyState == 4 && http_request.status == 200 ) {
the_object = JSON.parse( http_request.responseText );
}
};
http_request.send(null);
Ответы
Ответ 1
Что вы можете сделать в кросс-домене, введите script include:
var s = document.createElement('script');
s.src = 'http://someotherdomain/getMeMyJs.aspx?parameter=value';
s.onload = someOptionalCallback;
s.type = 'text/javascript';
if(document.getElementsByTagName('head').length > 0)
document.getElementsByTagName('head')[0].appendChild(s);
Теперь код, возвращенный этим запросом, будет выполнен немедленно. Если вы хотите, чтобы это взаимодействовало с вашим кодом, вы можете убедиться, что оно возвращается со всеми данными, включенными в вызов функции:
jsonCallback({ object: json, whatever: value });
Вы можете использовать это для создания API-интерфейсов, в которых вы передаете имя функции обратного вызова в качестве параметра querystring запроса. Вот пример такого API
Ответ 2
JSON - это всего лишь метод сериализации. Между методом сериализации и вопросом о том, будет ли браузер пытаться остановить доступ к данным через домены, нет никакой связи. (Это объясняет, почему вы только находите парсеров - для JSON ничего не нужно, кроме кодирования и декодирования).
XMLHTTPRequest только что назван XML HTTPRequest. Это не имеет ничего общего с XML. Он может использоваться для отправки текстовых данных, данных, закодированных в JSON, или любого другого метода сериализации.
Существует несколько способов доступа к перекрестному домену данных. один из них описан в ответе Дэвида Хедлунда. Другие можно найти в ответах на подобные вопросы (см. здесь и здесь).