Междоменный запрос JSON? - PullRequest
14 голосов
/ 13 января 2010

Вопрос:

Я пытаюсь использовать 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);

Ответы [ 2 ]

14 голосов
/ 13 января 2010

Что вы можете сделать для междоменных доменов, так это добавить скрипт:

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, где вы передаете имя функции обратного вызова в качестве параметра строки запроса. Вот пример такого API

13 голосов
/ 13 января 2010

JSON - это просто метод сериализации.Нет никакой связи между методом сериализации и вопросом о том, попытается ли браузер помешать вам получить доступ к данным через домены.(Это объясняет, почему вы только находите парсеры - в JSON нет ничего, кроме кодирования и декодирования).

XMLHTTPRequest просто называется XML HTTPRequest.Это на самом деле не имеет ничего общего с XML.Его можно использовать для отправки текстовых данных, данных, закодированных в JSON, или любого другого метода сериализации.

Существует несколько способов доступа к данным между доменами.один описан в ответе Дэвида Хедлунда.Другие можно найти в ответах на подобные вопросы (см. здесь и здесь ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...