jsonpCallback函数不起作用

时间:2011-06-02 13:33:42

标签: 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。为什么第二个警报没有出现?

4 个答案:

答案 0 :(得分:6)

你应该改变:

jsonp: 'callback',

jsonp: false

覆盖默认的回调值。

请参阅:http://api.jquery.com/jQuery.ajax/

答案 1 :(得分:3)

George是正确的,将jsonp param设置为false - 从jQuery 1.5开始(所以,你如何设置它依赖于jQuery版本)。我不相信您提供的回调名称是作为函数调用的(而是,它是提供给服务器的URL中提供的名称)。如果您获得成功,那么您已收到数据。好奇:你有没有设置dev的主机条目,因为我试着做一些测试,而http://www.remote_host.co.uk/feed.php并没有为我解决。

答案 2 :(得分:0)

我认为您需要将jsonpCallBack:'jsonpCallback'位更改为jsonpCallBack: function() { alert('boo'); }

答案 3 :(得分:-1)

对所有遇到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');
    });
});