Вот фрагмент кода, с которым я играю:
$.get('http://www51.zippyshare.com/d/70229620/44835/data.json', function (data) {
console.log(data);
}).fail(function () {
console.log('I failed to download json')
});
К сожалению, каждый раз, когда он не может загрузить этот файл и регистрирует сообщение.
Почему он не загружает этот файл?
Это связано с междоменными запросами. В некоторых браузерах безопасность устанавливается на уровень, на котором JSON (или другие файлы) не могут быть получены с помощью javascript, если целевой файл находится в другом домене в качестве домена, в котором вы сейчас находитесь. В chrome я получаю следующую ошибку:
XMLHttpRequest cannot load http://www51.zippyshare.com/d/70229620/44835/data.json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://xxx.xxx.xxx.xxx' is therefore not allowed access.
Способ обойти это с помощью JSONP, который разработан, чтобы избежать этой проблемы. Тем не менее, вам нужен контроль над выходом запрошенного файла. Таким образом, в вашем случае (получение json файла из zippyshare) это может стать очень сложным, если этот файл является динамическим.
Вот небольшой пример JSONP:
$.ajax({
type: 'GET',
url: "http://www51.zippyshare.com/d/70229620/44835/data.json",
async: false,
jsonpCallback: 'jsonCallback',
contentType: "application/json",
dataType: 'jsonp',
success: function(json) {
console.log(json.data);
},
error: function(e) {
console.log(e.message);
}
});
Важно, чтобы содержимое data.json теперь было включено в вызов функции, например:
jsonCallback(
{
"data": "value"
}
);
Более подробную информацию и пояснения можно найти здесь: http://www.jquery4u.com/json/jsonp-examples/
application/x-download
но исполняющий скрипт рассматривает его как нечто другое. Запрос ajax фактически добавляет теги script в раздел HEAD HTML-документа. Поскольку тег script встречает странный mime-тип в запрошенном файле, браузер выдает предупреждение. Это не должно быть настолько важно, я не думаю, что вы можете изменить заголовки, отправленные zippy anway ...