微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

json – jQuery ajax成功回调未触发

我使用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/.这样就可以用jQuery的$.jsonp代替jQuery的$.ajax调用,所以上面的代码看起来像这样:

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

然而,结果是一样的,成功回调从不触发.任何帮助或推动在正确的方向将不胜感激!

解决方法

通过jsonpCallback选项定义回调函数,不在url内:
function doJsonp()
{
    $.ajax({
        url: "http://api.flickr.com/services/Feeds/groups_pool.gne?id=807213@N20&lang=en-us&format=json&jsoncallback=?",jsonpCallback:'blah',//<<<
        success: function() { console.log("success"); },error: function() { console.log("error"); } 
    });
}

原文地址:https://www.jb51.cc/ajax/153194.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐