Я использую метод jQuery $.ajax
для извлечения данных из веб-службы, совместимой с JSONP, и что касается получения ответа и отображения полученных данных в моем HTML, все кажется работать нормально. Однако мне не удалось запустить обратный вызов метода ajax. Что еще более странно, так это то, что даже когда я получаю действительный ответ от службы, обратный вызов ошибки всегда запускается.
Вот пример простой js-функции, которую я сделал, чтобы проверить это:
function doJsonp()
{
$.ajax({
url: "http://example.com/api/service?callback=blah",
dataType: "jsonp",
crossDomain: true,
success: function() { console.log("success"); }, // This is never fired
error: function() { console.log("error"); } // This is always fired
});
}
и соответствующая функция обратного вызова:
function blah(data)
{
console.log(data); // This is called properly
}
Из чтения подобных вопросов здесь, в SO и в других местах, кажется, что это чаще всего вызвано сервис, возвращающий JSON, который не проходит проверку. Для своих целей я использую собственный веб-сервис, но пробовал и другие сервисы JSONP, такие как сервисы Flickr, например:
И JSON из сервиса Flickr, и мой проверяют с помощью jsonlint, так что, насколько я могу судить, проблема не в этом.
В поисках решения этой проблемы я попытался использовать подключаемый модуль jQuery под названием jquery-jsonp, который можно найти по адресу http://code.google.com/p/jquery-jsonp/. Это заменяет вызов jQuery $.ajax
собственным $.jsonp
, поэтому приведенный выше код выглядит так:
function doJsonp()
{
$.jsonp({
url: "http://example.com/api/service?callback=blah",
success: function() { console.log("success"); },
error: function() { console.log("error"); }
});
}
Однако результат тот же, и обратный вызов успеха никогда не срабатывает. Любая помощь или толчок в правильном направлении будет принята с благодарностью!