jQuery ajax成功回调没有解雇

时间:2012-04-23 11:56:24

标签: json jquery jsonp

我正在使用jQuery的$.ajax方法从兼容JSONP的Web服务获取数据,并且只要获得响应并在我的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的服务引起的。出于我的目的,我使用的是内部Web服务,但也尝试过其他JSONP服务,例如Flickr提供的服务,例如:

http://api.flickr.com/services/feeds/groups_pool.gne?id=807213@N20&lang=en-us&format=json&jsoncallback=blah

来自Flickr服务和我的JSON都使用jsonlint进行验证,因此就我所知,这似乎不是问题。

在搜索此问题的解决方案时,我尝试使用名为jquery-jsonp的jQuery插件,该插件位于http://code.google.com/p/jquery-jsonp/。这将用自己的$.ajax替换jQuery的$.jsonp调用,因此上面的代码如下所示:

function doJsonp()
{
    $.jsonp({
        url: "http://example.com/api/service?callback=blah",
        success: function() { console.log("success"); },
        error: function() { console.log("error"); }
    });
}

然而,结果是相同的,并且成功回调永远不会触发。任何帮助或正确方向的推动都将不胜感激!

1 个答案:

答案 0 :(得分:4)

通过 jsonpCallback -option定义回调函数,而不是在url中:

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