Я столкнулся с трудностями с проблемой перекрестной политики JSON. После небольшого эксперимента я смог заставить этот код работать, но я столкнулся с ситуацией, когда у меня было два кода, которые кажутся им одинаковыми, но работает только один.В чем разница между этими двумя сценариями ajax?
JSON я доступ здесь
http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json
Этот файл может быть просто JSONP: он не принимает никаких параметров, и JSON проложенный с вызовом функции называется jsonCallBack. Он кажется действительным JSON.
Вот первый набор кода, который я пытался использовать, чтобы захватить этот JSON данные:
$.getJSON("http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=jsonCallback", function (data) {
//This will not alert
alert(data.APHNonStopProducts.Carpark[0].Airport.airportcode);
});
Мое понимание было то, что вы могли бы заменить callback=?
с именем функции обертки, чтобы иметь эти данные передан анонимной функции. Этот код показывает следующее сообщение об ошибке в инструментах Chrome Dev:
XMLHttpRequest не может загрузить http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=jsonCallback. Происхождение http://fiddle.jshell.net не допускается Access-Control-Allow-Origin.
Стоит отметить, что если оставить URL в aphnonstopproductsjson.json?callback=?
и имеют именованный функцию, присутствующую в моем коде, то данные извлекаются правильно и с именем функции с именем (хотя анонимный один до сих пор нет)
Вот второй код, который работает:
$.ajax({
url: "http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=?",
dataType: 'json',
jsonp : "callback",
jsonpCallback: "jsonCallback",
success: function(data) {
//This alert will fire
alert(data.APHNonStopProducts.Carpark[0].Airport.airportcode);
}
});
});
В этом вызове, я указать, что имя параметра должно быть обратный вызов, и имя функции должно быть jsonCallback. Итак, по сути, это не так, как первый код? Если да, то почему первый код выходит из строя?
См обе части кода здесь: http://jsfiddle.net/3EXca/ (Вы должны получить уведомление, в котором говорится, «АБЗ»)
Вы тестировали во всех браузерах? Я думаю, что эти ошибки исходят от FireFox –
Это * не * действительный JSONP. JSONP позволяет указать имя обратного вызова. –
@bobek, я в первую очередь тестирую в Chrome, но также получаю сообщение об ошибке в Firefox. –