下面的一段代码,使用jQuery的getJSON调用服务,没有useJsonp
部分,很长一段时间对我来说很好。然后,需要支持JSONP并添加if (useJsonp)
条件。这也可以正常工作,直到HTTP请求失败。当我使用404响应失败(使用Fiddler)时,没有回调(.done
和.fail
被调用)。当请求没有失败时,我会进入.done
回调。
function getData(url){
var dfd = $.Deferred();
if (useJsonp) {
url += '&callback=?';
}
$.when($.getJSON(url))
.done(function (dataObj) {
if (!dataObj || dataObj.Status === 'failed') {
dfd.reject(dataObj);
}
else {
doSomething(dataObj);
dfd.resolve(dataObj);
}
})
.fail(function (jqXHR) {
dfd.reject(jqXHR);
});
return dfd.promise();
};
为什么?我该怎么做才能调用回调?
由于
答案 0 :(得分:0)
$。当缺少结束括号时,是不是因为这个,请尝试,其他代码是正确的。这就是它的实现方式。
var dfd = $.Deferred();
if (useJsonp) {
url += '&callback=?';
}
$.when($.getJSON(url))
.done(function (dataObj) {
dfd.resolve(dataObj);
})
.fail(function (jqXHR) {
dfd.reject(jqXHR);
}));
return dfd.promise();
答案 1 :(得分:0)
对于jsonp请求,我执行以下操作:
$.ajax(url, {
dataType: useJsonp ? "jsonp" : undefined,
success: function(result) {
console.log(result);
alert("It worked!");
},
error: function(result) {
console.log(result);
alert("It didn't work!");
}
});