jQuery重新发送AJAX请求?

时间:2012-02-07 19:13:36

标签: jquery ajax polling ajax-polling

我对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               
      });
}

0 个答案:

没有答案