Подтвердить что ты не робот

JQuery ajax callback не срабатывает

Я использую метод 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, например:

http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=blah

Как JSON из службы Flickr, так и my проверяют использование 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"); }
    });
}

Однако результат тот же, и обратный вызов успеха никогда не срабатывает. Любая помощь или толчок в правильном направлении были бы очень благодарны!

4b9b3361

Ответ 1

определить функцию обратного вызова с помощью jsonpCallback -option, а не внутри URL:

function doJsonp()
{
    $.ajax({
        url: "http://api.flickr.com/services/feeds/[email protected]&lang=en-us&format=json&jsoncallback=?",
        dataType: "jsonp",
        crossDomain: true,
        jsonpCallback:'blah',//<<<
        success: function() { console.log("success"); }, 
        error: function() { console.log("error"); } 
    });
}