1

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

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

除了一个小问题外,这非常有效。我发现当我们有大报告时,它似乎发送了第二个 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               
      });
}
4

0 回答 0