如何在空响应上重试ajax请求

时间:2014-03-06 11:15:55

标签: php ajax

我想在响应数据为空的json对象时重试ajax请求。

我的ajax代码如下。

$.ajax({
        type: "POST",
        url: "index.php?r=funding/getPaymentButton",
        data: {email:benfEmail,data:JSON.stringify(data),paymentType:method},
        async: true,//false
        success: function (data) 
        { 
            if(data.length === 0)
            {
                $(this).ajax();//retry ajax request here, if data is empty
                console.log('err');
            }
            else
            {
                obj = jQuery.parseJSON(data);
                // prcessing ajax request
            }
        }
});

PHP

echo json_encode(array(
    'type'=>$paymentType, 
    'btn'=>$this->PaymentBtn,
    'usd' => round($this->finalUSDAmount,2),)
);

2 个答案:

答案 0 :(得分:0)

您可以将ajax请求放入函数中,然后调用该函数如果响应为空。

像这样:

 function yourCall(){
     $.ajax({
        type: "POST",
        url: "index.php?r=funding/getPaymentButton",
        data: {email:benfEmail,data:JSON.stringify(data),paymentType:method},
        async: true,//false
        success: function (data) 
        { 
            if(data.length === 0)
            {
               yourCall();
               console.log('err');
            }
            else
            {
                obj = jQuery.parseJSON(data);
                // prcessing ajax request
            }
        }
    });
 }
然而,

此设置将继续尝试ajax调用,直到它获得有效的响应。这意味着如果响应长度== 0

,它将继续触发

答案 1 :(得分:0)

只需遵循:

$.ajax({
    url : 'index.php?r=funding/getPaymentButton',
    type : 'POST',
    data :  {email:benfEmail,data:JSON.stringify(data),paymentType:method},   
    tryCount : 0,
    retryLimit : 3,
    success : function(json) {
        //do something
    },
    error : function(xhr, textStatus, errorThrown ) {
        if (textStatus == 'timeout') {
            this.tryCount++;
            if (this.tryCount <= this.retryLimit) {
                //try again
                $.ajax(this);
                return;
            }            
            return;
        }
        if (xhr.status == 500) {
            //handle error
        } else {
            //handle error
        }
    }
});