我正在使用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
});
}
Run Code Online (Sandbox Code Playgroud)
和匹配的回调函数:
function blah(data)
{
console.log(data); // This is called properly
}
Run Code Online (Sandbox Code Playgroud)
通过在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"); }
});
}
Run Code Online (Sandbox Code Playgroud)
但是,结果是相同的,并且成功回调永远不会触发.任何帮助或推动正确的方向将不胜感激!