2014-01-06 5 views
0

Вот фрагмент кода, я играю с:Не удалось загрузить файл с помощью JQuery

$.get('http://www51.zippyshare.com/d/70229620/44835/data.json', function (data) { 
console.log(data); 
}).fail(function() { 
console.log('I failed to download json') 
}); 

К сожалению, каждый раз, когда он не может загрузить этот файл и записывает сообщение.

Почему это не загружает этот файл?

+0

Междоменная политика? Что делать, если вы попробуете JSONP? – BenM

+0

Какой у вас вопрос? Вы не хотите регистрировать сообщение, если оно не удается? – Praind

+0

Может быть, потому что размер загруженного файла равен нулю? – laaposto

ответ

1

Это связано с междоменными запросами. В некоторых браузерах безопасность устанавливается на уровень, на котором JSON (или другие файлы) не могут быть получены с помощью javascript, если целевой файл находится в другом домене в качестве домена, в котором вы сейчас находитесь. В хроме я получаю следующее сообщение об ошибке:

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/

+0

Слайк! Спасибо за код. Я приму этот ответ. Один вопрос: перед записью данных в консоли он выводит это: _Resource интерпретируется как скрипт, но передается с приложением MIME-типа/x-download: «http://www34.zippyshare.com/d/23896885/6013/data.json?callback = jsonCallback & _ = 1389009838017" _. Что это? –

+0

Нет проблем! Это означает, что заголовки, отправленные для файла, были «application/x-download», но исполняемый скрипт рассматривает его как нечто другое. Запрос ajax фактически добавляет теги сценария в раздел HEAD документа HTML. Поскольку в запрошенном файле тег скрипта встречает странный тип mime, браузер выдает предупреждение. Это не должно быть большой сделки, я не думаю, что вы можете изменить те заголовки, отправленные zippy в пути ... – Hless

Смежные вопросы