我对jQuery AJAX jQuery请求有一个奇怪的问题。当我们在我们的网站上生成报告时,可能需要一段时间,因此我们有一个状态栏,我们通过轮询更新。然而,我所看到的是这些请求似乎是超时和重新发送 - 这是一种非常奇怪的行为。
这是工作流程: - 用户输入他们的电子邮件地址并点击“获取报告” -Button触发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
});
}