Jquery $ .when有多个参数和xhr

时间:2013-04-21 16:47:35

标签: javascript jquery

我使用$ .when多个请求。请考虑以下代码:

$.when(
    $.ajax({url: '/show/' + showId + '/details.json', type: 'GET', dataType: 'json', async: false}),
    $.ajax({url: '/show/' + showId + '/graphicAssets.json', type: 'GET', dataType: 'json', async: false}),
    $.ajax({url: '/graphicAssets/show/' + showId + '/files.json', type: 'GET', dataType: 'json', async: false}),
    $.ajax({url: '/graphicAssets/show/types.json', type: 'GET', dataType: 'json', async: false}),
    $.ajax({url: '/season/'+ showId +'/seasons.json', type: 'GET', dataType: 'json', async: false}),
    $.ajax({url: '/freebie/' + showId + '/freebies.json', type: 'GET', dataType: 'json', async: false})
)
.then(function(showDetailsData, showGraphicAssetsData, showFilesData, showTypesData, showSeasonsData, showFreebieData, status, xhr) {
    if (xhr.status == '302') location.reload();

    // Rest of the code goes here
}

现在,我想要做的是检查xhr对象的响应状态。结果未定义。我该如何解决这个问题?非常感谢!

1 个答案:

答案 0 :(得分:2)

如果将多个延迟传递给$.when,则then处理程序会收到一个数组,其中包含解析每个延迟的结果。因此,在您的情况下,您将获得7个数组,每个数组包含data, textStatus, jqXHR

因此,在您的情况下,正确的用法将是:

$.when(
$.ajax({url: '/show/' + showId + '/details.json', type: 'GET', dataType: 'json', async: false}),
$.ajax({url: '/show/' + showId + '/graphicAssets.json', type: 'GET', dataType: 'json', async: false}),
$.ajax({url: '/graphicAssets/show/' + showId + '/files.json', type: 'GET', dataType: 'json', async: false}),
$.ajax({url: '/graphicAssets/show/types.json', type: 'GET', dataType: 'json', async: false}),
$.ajax({url: '/season/'+ showId +'/seasons.json', type: 'GET', dataType: 'json', async: false}),
$.ajax({url: '/freebie/' + showId + '/freebies.json', type: 'GET', dataType: 'json', async: false})
)
.then(function(showDetailsData, showGraphicAssetsData, showFilesData, showTypesData, showSeasonsData, showFreebieData) {
    if (showDetailsData[2].status == '302' 
        || showGraphicAssetsData[2].status == '302' 
        ... etc) location.reload();

    // Rest of the code goes here
}