管理超时ajax请求

时间:2014-09-18 12:44:22

标签: jquery ajax

我想通过.when.then来暂停管理ajax调用。

我有一个这样的脚本:

$.when(
        $.ajax({   
            url: url_ajax, 
            type: "GET", 
            async: true,
            data: window.location.search, 
            dataType: "json", 
            timeout: 30000,
            success: function(data) {
                console.log('ok');
            },
            error: function(data) {

            }
        }),
        $.ajax({   
            url: url_ajax, 
            type: "GET", 
            async: true,
            data: window.location.search, 
            dataType: "json", 
            success: function(data) {
                console.log('ok');
            },
            timeout: 30000,
            error: function(data) {

            }
        })
     ).then(function() {
          alert('end');
     });

如果ajax请求超时,则不会调用回调.then,我看不到最后一个警报。 因此,如果我的ajax请求超时,我无法退出进入then函数。

我还尝试在每次ajax请求后添加:

.fail(function(jqXHR, textStatus){
            if(textStatus == 'timeout')
            {     
                alert('Failed from timeout'); 
            }
         })

但是再次没有进入then函数

如何管理超时? 感谢

1 个答案:

答案 0 :(得分:1)

您是否曾尝试使用.then(successCallbackFunction, failCallbackFunction)

$.when(
    $.ajax({   
        url: url_ajax, 
        type: "GET", 
        async: true,
        data: window.location.search, 
        dataType: "json", 
        timeout: 30000,
        success: function(data) {
            console.log('ok');
        },
        error: function(data) {

        }
    }),
    $.ajax({   
        url: url_ajax, 
        type: "GET", 
        async: true,
        data: window.location.search, 
        dataType: "json", 
        success: function(data) {
            console.log('ok');
        },
        timeout: 30000,
        error: function(data) {

        }
    })
 ).then( // success
         function() {
           alert('Success!');
         },
         // failure
         function(jqXHR, textStatus){
            if(textStatus == 'timeout')
            {     
                alert('Failed from timeout'); 
            } else {
                alert('Failed from: '+textStatus);
            }
         }
 );