我正在使用 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 提供的服务,例如:
Flickr 服务和我的 JSON 都使用 jsonlint 进行验证,因此据我所知,这似乎不是问题。
在寻找此问题的解决方案时,我尝试使用名为 jquery-jsonp 的 jQuery 插件,该插件位于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"); }
});
}
但是,结果是相同的,并且成功回调永远不会触发。任何帮助或朝着正确方向轻推将不胜感激!