Функция обратного вызова jsonpCallback не работает

#jquery #jsonp

#jquery #jsonp

Вопрос:

ОБНОВЛЕНИЕ 1:

Я только что обновился с jquery 1.4.4 до 1.6.1. Как это влияет на сценарий в исходном вопросе?

ОРИГИНАЛЬНЫЙ ВОПРОС:

Так же, как я тестировал, я сделал:

 $(document).ready(function() {
    get_jsonp_feed();

    function get_jsonp_feed() {
        $.ajax({
            url: 'http://www.remote_host.co.uk/feed.php',
            type: 'GET',
            dataType: 'jsonp',
            jsonp: 'callback',
            jsonpCallback: 'jsonpCallback',
            error: function(xhr, status, error) {
                alert("error");
            },
            success: function(jsonp) { 
                alert("success");
            }
        });
    }

    function jsonpCallback(data){
        alert("jsonpCallback");
    }
});
  

Я ожидал получить 2 предупреждения, первое показывающее success и второе показывающее jsonpCallback . Но я получаю только первое предупреждение success . Почему не отображается второе предупреждение?

Ответ №1:

Вам следует изменить:

 jsonp: 'callback',
  

Для

 jsonp: false
  

чтобы переопределить значение обратного вызова по умолчанию.

Смотрите: http://api.jquery.com/jQuery.ajax /

Комментарии:

1. Я все еще не получил второе предупреждение.

Ответ №2:

Джордж прав, установите для параметра jsonp значение false — начиная с jQuery 1.5 (итак, способ настройки зависит от версии jQuery). Я не верю, что указанное вами имя обратного вызова вызывается как функция (скорее, это имя, указанное в URL, представленном серверу). Если вы получаете успех, значит, вы получили данные. Любопытно: настроена ли у вас запись hosts для разработчиков, потому что я пытался провести некоторое тестирование, и http://www.remote_host.co.uk/feed.php не решает для меня.

Комментарии:

1. обратный вызов добавляется к URL автоматически afaik.

2. Пожалуйста, смотрите обновление 1. Кроме того, remote_host был сделан, чтобы скрыть название моего веб-сайта / компании.

3. Правильно, имя обратного вызова добавляется автоматически; установите для «jsonp:» значение false и установите «jsonpCallback:», как того требует хост-сервер. jQuery обрабатывает ответ. Указанное вами имя обратного вызова не вызывается как функция. Вы получаете данные JSON при «успешном» обратном вызове.

Ответ №3:

Я думаю, вам нужно изменить jsonpCallBack:'jsonpCallback' бит на jsonpCallBack: function() { alert('boo'); }

Комментарии:

1. Начиная с версии jQuery 1.5, функция может быть предоставлена в качестве параметра обратного вызова jsonpCallback метода $.ajax. Эта функция вызывается не при получении ответа от запроса XHR, а до выполнения запроса и должна возвращать строку (которая будет использоваться для аргумента обратного вызова в URL).

Ответ №4:

Всем моим друзьям, у которых возникли проблемы с PHP jQuery JSONP

вот и все, я использую php 5.3 и Jquery 1.10

 $('#button_submit2').click(function () {
    prevent_caching = (new Date()).getTime();
    $.ajax({
        type: 'GET'
        , url: "http://yoururl.com/webservice.php"
        , dataType: 'jsonp'     //Besides plain xml, the dataType can be html, json, jsonp, script, or text.
        , jsonp: 'callback'     //this will be added in the query as parameter
        , jsonpCallback: 'jsonp_reply'  //this is what ajax call is expecting json to be encapsulated ine i.e. json_reply(JSON_RESPONSE)
        , data: {
            uniq_val: prevent_caching
            , method_name: "get_all_tasks"
            , format: 'jsonp'
        }
        , cache: false
        , async: false
    })
    .success(function (rsp) {
        console.log('success' rsp);
    })
    .fail(function (xhr, error, thrownError) {
        console.log('fail  status:['   xhr.status   ']  error:['   thrownError   ']');
    })
    .always(function () {
        console.log('complete');
    });
});
  

Комментарии:

1. Почему это было отклонено? Серьезно, SO должен предотвращать провалы голосования без объяснения причин!! Есть какая-нибудь помощь по этому поводу?