如何知道ajax最后的响应是否已达到?

时间:2012-12-05 16:46:44

标签: javascript ajax jquery

我试图捕捉/知道它何时达到200(成功)的最后一次并做了一些事情,即退出。

我怎么知道它最后一次达到200?

以下是我的代码

//主函数whihc调用save和checkstatus函数

   $(function () {
        $("#saveChange").click(function () {
            save().complete(function (jqXHR, responseText) {

                var stat = jqXHR.status;
                if (stat == 200) {
                    console.log("inside 200");

                    setTimeout(function () {
                        checkServerStatus().complete(function (jqXHR, responseText) {

                            if (jqXHR.status == 200) {
                                console.log("inside 200");
                                setTimeout(function () {
                                    checkServerStatus().complete(function (jqXHR, responseText) {
                                        count = 0;
                                        count++;
                                        max = 10;
                                        if ((count <= max) && (jqXHR.status == 200)) {
                                            checkServerStatus();
                                            //alert(count);
                                        }

                                    });
                                    if (jqXHR.status == 500) {
                                        // alert(" 500 setimeout inside 500 status "+jqXHR.status + responseText);  
                                    } else if (jqXHR.status == 200) {
                                        // alert(" 200 setimeout inside 200 status "+jqXHR.status + responseText);  
                                    }
                                }, 9000);

                            } else if (jqXHR.status == 500) {
                                // 500 error no submission
                                console.log("inside 500");
                                //alert(" 300 setimeout inside 500 status "+jqXHR.status + responseText);   
                                checkServerStatus();
                            } else {
                                alert("else");
                            }
                        });
                    }, 6000);
                } 

            });


        });
    });

    });

1 个答案:

答案 0 :(得分:0)

关于重试ajax请求here的讨论很好。我建议你自己处理延期。通过这种方式,您可以随心所欲地进行虚拟延迟,解决或拒绝它,然后像往常一样进行链接。

function checkServerStatus() {
    var dfd = new $.deferred();

    $.ajax({
         url : 'ajaxurl.json',
         tryCount : 0,
         retryLimit : 3,
        success : function(json) {
            dfd.resolve();
        },
        error : function(xhr, textStatus, errorThrown ) {
            if (this.tryCount++ <= this.retryLimit) {
                //try again
               $.ajax(this);
               return;
            }
            dfd.reject();
        }
    });
    return dfd;
}

像往常一样链

checkServerStatus().then(function() {
    // success!
}, function() {
   // reached retry limit :(
});