jQuery:为JSONP添加“callback”参数不会触发回调

时间:2014-03-02 13:28:51

标签: javascript jquery ajax jsonp promise

下面的一段代码,使用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();
};

为什么?我该怎么做才能调用回调?

由于

2 个答案:

答案 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!");
    }
});