如果发生超时错误,如何再次进行Ajax调用

时间:2014-12-12 11:56:35

标签: jquery ajax

我的html文件中有一个文档就绪函数,如下所示

$(document).ready(function() 
{
   cust_id = getParameterByName('customer_id');

    var locationAjaxCall = $.ajax({
        type: 'GET',
        url: url+'/OMS/oms1/getlocationscreen?screen_ids=' + screen_ids,
        jsonpCallback: 'jsonCallback',
        cache: true,
        dataType: 'jsonp',
        jsonp: false,
        success: function (response) {

        },
        error: function (xhr, ajaxOptions, thrownError) {
        }
    });
    locationAjaxCall.done(function() {
        $.ajax({
            type: 'GET',
            url: url+'/OMS/oms1/fromscratchmodified?screen_ids=' + screen_ids,
            jsonpCallback: 'jsonCallback',
            dataType: 'jsonp',
            jsonp: false,
             timeout: 5000,
            success: function(response) {
            },
             error: function(x, t, m) {
            if(t==="timeout") {
            alert("got timeout");
            }
    }
});
}).done(function() {
    });
});

进行第二次Ajax调用。我保持超时 5秒,如下所示

我的问题是,如果在第二次Ajax调用期间发生超时,我该如何再次进行Ajax调用?

(我不想重新加载整个页面,因为我可能会丢失一些已设置的数据)

请告诉我是否可能?

2 个答案:

答案 0 :(得分:1)

将第二个AJAX调用移动到某个函数,也许?当超时发生时,再次调用它。

function fname() {
    $.ajax({
            type: 'GET',
            url: url+'/OMS/oms1/fromscratchmodified?screen_ids=' + screen_ids,
            jsonpCallback: 'jsonCallback',
            dataType: 'jsonp',
            jsonp: false,
            timeout: 5000,
            success: function(response) {
                // success
            },
            error: function(x, t, m) {
                if(t==="timeout") {
                    alert("got timeout");
                    fname();
                }
            }
    });
}

答案 1 :(得分:1)

你是说这个意思吗?使用setInterval并在成功时清除间隔。

  $(document).ready(function() 
    {
       cust_id = getParameterByName('customer_id');

        var locationAjaxCall = $.ajax({
            type: 'GET',
            url: url+'/OMS/oms1/getlocationscreen?screen_ids=' + screen_ids,
            jsonpCallback: 'jsonCallback',
            cache: true,
            dataType: 'jsonp',
            jsonp: false,
            success: function (response) {

            },
            error: function (xhr, ajaxOptions, thrownError) {
            }
        });
        locationAjaxCall.done(function() {
            var intvl=setInterval(function(){
            $.ajax({
                type: 'GET',
                url: url+'/OMS/oms1/fromscratchmodified?screen_ids=' + screen_ids,
                jsonpCallback: 'jsonCallback',
                dataType: 'jsonp',
                jsonp: false,
                 timeout: 5000,
                success: function(response) {
                 clearInterval(intvl);
                },
                 error: function(x, t, m) {
                if(t==="timeout") {
                alert("got timeout");
                }
              }
          });
        },5000);
      }).done(function() {
     });
    });