jQuery .when()。always()返回404状态,应该是200

时间:2016-06-21 20:29:17

标签: javascript jquery

我正在使用jQuery的$.when.always延迟方法从两个不同的端点检索数据集(我无法更改)。

我有一个如下所示的抽象方法:

function getData(reqUrl, reqData) {
    var reqType = 'GET';
    var contentType = 'application/json;charset=UTF-8';
    if(reqData){
        reqType = 'POST';
        contentType = 'application/x-www-form-urlencoded';
    }

    return $.ajax({
        url: reqUrl,
        type: reqType,
        data: reqData ? reqData : null,
        dataType: 'json',
        contentType: contentType
    });
}

我有两个调用该函数,如下所示:

var req1 = getData('/path/to/endpoint1', {
          dir: 'asc',
          sort: 'name',
          results: 100,
          startIndex: 0
        });

var req2 = getData('/path/to/endpoint2');

然后我将这两个传递给jQuery $.when.always,这样即使一个失败,我仍然可以继续处理我回来的数据。

$.when(req1, req2)
 .always(function(resp1, resp2) {
      console.log(resp1);
      console.log(resp2);
});

我希望resp1能够带回200,并且当我在Chrome开发工具中查看它时会这样做。 resp2此时应该抛出404,Chrome开发工具也会这样做。

但是,当两个console.log语句被命中时,resp1将注销状态为404的jqXhr对象,而resp2只记录字符串文字“error”。

如果我从resp2中移除$.when,那么一切都按预期工作。也就是说resp1返回我期望的数据。

如果我从resp1删除$.when,那么一切正常,我得到了带有404状态代码的jqXhr对象。

但是当我将它们组合在一起时,resp1似乎会被resp2覆盖。我确认他们独立工作,我有点不知所措。

0 个答案:

没有答案