Не могу прочитать файл JSON на моем локальном сервере с моего веб-сервера - PullRequest
1 голос
/ 23 августа 2011

Итак, у меня есть файл json с именем array.json на моем веб-сервере. Я собираюсь прочитать этот файл в моем веб-приложении локально (на данный момент), а затем в другом домене, как только я начну работать, я создал этот jsonсам файл, и вот данные, которые он содержит.

 {"h1": "cmPanel", "h2" : "cmAuto", "h3": 0}

Когда я пытаюсь прочитать файл, я не получаю ответ, почему это будет?

Вот мой коддля чтения файла;

$.getJSON('http://www.foobar.com/array.json', function(data){
     alert(data);
 });

Я также попытался добавить &callback=?, но я ничего не получаю, не могли бы вы помочь!

Ответы [ 5 ]

3 голосов
/ 23 августа 2011

Цитирование официальных документов:

Из-за ограничений безопасности браузера большинство запросов "Ajax" в соответствии с той же политикой происхождения ; запрос не может быть успешно получить данные из другого домена, субдомена или протокола .

Запросы Script и JSONP не имеют одинакового происхождения. ограничения политики.

Более подробная информация о той же политике происхождения

Чтобы обойти это, загляните в JSONP.

1 голос
/ 23 августа 2011

Для выполнения междоменных вызовов ajax вам нужно будет использовать прокси или JSONP .Поскольку вы уже настроили JSON, JSONP может быть самой простой альтернативой.Короче говоря, JSONP влечет за собой упаковку ваших данных JSON в вызов функции, чтобы они могли быть переданы обратно вызывающему сценарию таким образом, чтобы обойти Same Origin Policy .

В вашем случае вы могли бы обернуть ваши данные json функцией с именем "myjsoncallback", чтобы она выглядела так:

myjsoncallback({"h1": "cmPanel", "h2" : "cmAuto", "h3": 0})

И затем измените свой вызов ajax на что-то вроде следующего:

$.ajax({
    url: 'http://www.foobar.com/array.json',
    dataType: 'jsonp',
    jsonpCallback: 'myjsoncallback',                // Specify our callback function name
    success: function(data) { console.log(data); }
});
0 голосов
/ 23 августа 2011

array.json должен обслуживаться с правильным Content-Type:
text/javascript; charset=utf-8, если используется обратный вызов
application/json; charset=utf-8, если это обычный json
см. Здесь Лучший тип контента для обслуживания JSONP?
, чтобы избежать проблем из «политики одного и того же происхождения»

0 голосов
/ 23 августа 2011

Чтобы увидеть возвращенный JSON, вам нужно повторить результат

$.getJSON('array.json', function(data){
    var items = [];

   $.each(data, function(key, val) {
      items.push('Key = ' + key + '<br/>Value = ' + val + '<br/><br/>');
   });
   alert(items.join(''));
 });
0 голосов
/ 23 августа 2011

Получили ли вы доступ к серверу из своего веб-приложения?(та же политика происхождения)

Чтобы использовать jsonp, вы не могли просто добавить обратный вызов к URL-адресу файла json.Сервер должен предоставить функцию, которая возвращает данные.Этот файл можно включить в тег html-скрипта по умолчанию и впоследствии выполнить возвращаемую функцию.

...