jQuery是否重新发送AJAX请求?

jQuery是否重新发送AJAX请求?,jquery,ajax,polling,ajax-polling,Jquery,Ajax,Polling,Ajax Polling,我对jQuery AJAX jQuery请求有一个奇怪的问题。当我们在网站上生成报告时,可能需要一段时间,因此我们有一个状态栏,可以通过轮询进行更新。然而,我看到的是,这些请求似乎超时并重新发送——这是一种非常奇怪的行为 以下是工作流程: -用户输入电子邮件地址并单击“获取报告” -按钮触发AJAX请求(见下文)。 -发出AJAX请求后,我们发送第二个更简单的请求,以轮询checkStatus函数。此函数将JSON字符串返回给更新屏幕上状态栏的回调。 -在原始AJAX请求的“success”属性

我对jQuery AJAX jQuery请求有一个奇怪的问题。当我们在网站上生成报告时,可能需要一段时间,因此我们有一个状态栏,可以通过轮询进行更新。然而,我看到的是,这些请求似乎超时并重新发送——这是一种非常奇怪的行为

以下是工作流程: -用户输入电子邮件地址并单击“获取报告” -按钮触发AJAX请求(见下文)。 -发出AJAX请求后,我们发送第二个更简单的请求,以轮询checkStatus函数。此函数将JSON字符串返回给更新屏幕上状态栏的回调。 -在原始AJAX请求的“success”属性中,我们设置了一个停止轮询的标志,因此当报告完成时,轮询停止(最后一次状态更新反映它已完成)

除了一个小问题外,这个方法工作得很好。我发现,当我们有大报告时,它似乎会发送第二个getReport请求,而用户实际上什么也不做。我可以这样说,因为我们的状态将达到1000行中的700行,然后跳回到1000行中的15行,然后跳回到1000行中的710行,然后跳回到1000行中的25行,这表明同时生成了两个报告,并使用不同的状态更新状态标志

我所能想到的是,由于某种原因,原始的getReport AJAX请求正在被重新发送。是否有超时或我不知道的事情

代码如下:

var update = false;

//// Function triggered by user when requesting report
function get_report () {
    if ( !$("#reportEmail").val() ) {
        alert ( "Please enter a valid email address to send the report to." );
        return;
    }

    var dataStr = "email="+$("#reportEmail").val();

    $("#report").html ( "<b>Your report is being generated and will be emailed to you momentarily.</b>" );
    $.ajax({               
        type: 'POST',
        data: dataStr,
        url: "/reports/roster/15",
        success: function() { update = false; }
      });

    $("#completed").css ( 'width',"0" );
    update = true;
    setTimeout ( "checkStatus('reg_roster', updateStatusBar);", 10 );
}

//// Call back from the checkStatus function
function updateStatusBar ( data ) {
    response = jQuery.parseJSON(data);
    if ( response ) {
        $("#statusBar").show();
        $("#completed").css ( 'width', response.completed+"%" );
        $("#msg").html ( response.message );
        if ( update == true )
            setTimeout ( "checkStatus('reg_roster', updateStatusBar);", 1000 );
    }
}

////Polling function to check status
function checkStatus(type, callback) {
$.ajax({  
        type: 'POST',
        async: false,
        data: "&type="+type,
        url: "/status/check/",
        success: callback               
      });
}
var更新=false;
////请求报告时由用户触发的功能
函数get_report(){
如果(!$(“#报告电子邮件”).val()){
警报(“请输入有效的电子邮件地址以将报告发送到”);
返回;
}
var dataStr=“email=”+$(“#reportEmail”).val();
$(“#报告”).html(“您的报告正在生成,并将立即通过电子邮件发送给您。”);
$.ajax({
键入:“POST”,
数据:dataStr,
url:“/reports/花名册/15”,
成功:函数(){update=false;}
});
$(“#已完成”).css('width','0”);
更新=真;
设置超时(“检查状态('reg_花名册',updateStatusBar);”,10);
}
////从checkStatus函数回调
函数updateStatusBar(数据){
response=jQuery.parseJSON(数据);
如果(答复){
$(“#状态栏”).show();
$(“#已完成”).css('width',response.completed+“%”);
$(“#msg”).html(response.message);
如果(更新==true)
设置超时(“检查状态('reg_花名册',updateStatusBar);”,1000);
}
}
////用于检查状态的轮询功能
函数检查状态(类型、回调){
$.ajax({
键入:“POST”,
async:false,
数据:“&type=“+type,
url:“/status/check/”,
成功:回调
});
}

似乎发送了请求,因为我们的状态不是确保请求实际发送的非常可靠的方法,您是否尝试过Firebug之类的网络分析工具?我肯定会有第二个请求通过。还有第三个,如果我等得够久的话。然后是第四个。通过观察状态栏的跳跃,我可以看到有多个请求正在执行。我用firebug检查了它,果然,当第一个请求变为“已中止”时,我就开始看到来自新请求的结果。公平地说,我没有看到第二个请求发出,但在我的服务器上我可以看到第二个请求发出。另外,我尝试将ajax请求中的超时设置为1000000。没有区别。请尝试添加
错误:函数(x,t,m){alert(t);}
以查看它是否真的超时