为什么浏览器会在ajax调用期间锁定?

时间:2016-12-15 18:31:03

标签: php ajax apache browser

[===请参阅第二部分,因为我改写了原来的问题====] 我有一个表单在提交时调用Ajax。 Ajax调用一个从Mysql中检索数据的php代码。 一切正常,没有错误。

问题是,当Ajax还在等待完成请求时,我无法取消它。浏览器后退按钮不起作用。点击页面上的任何其他链接都不起作用。

它看起来像某种锁定浏览器的会话锁。

这可能是session_write_close()的任何内容吗?

 function getHistory(){
        startDate = $('#start_date').val();
        endDate = $('#end_date').val();


        $.ajax({
            url: "/coms/reports/jsonHistory",
            type: "POST",
            data: {
                startDate: startDate,
                endDate: endDate,
            },
            datatype: "text",
            success: function (responseObj) {
                var resultDataTable = $('#HistoryDataTable').DataTable();
                resultDataTable.clear().draw();
                for (var key in responseObj) {
                    if (responseObj.hasOwnProperty(key)) {
                        duration = responseObj[key]['duration'];
                        connection_ip = responseObj[key]['connection_ip'];
                        resultDataTable.row.add([
                            duration,
                            connection_ip
                        ]).draw();
                    }
                }
            },
            complete: function () {
                console.log('here i am');
            },
            error: function () {

            }
        });
}


$(document).ready(function () {

    $("#myFormSubmit").click(function () {
        getHistory();
    });


}

我已经包含了Ajax Block。 jsonHistory是一个php代码jsonHistory.php,它查询数据库并返回JSON。如果由于大型数据库,此代码可能需要大约一分钟才能完成。因此用户可能会改变主意并希望离开页面,但浏览器会被Ajax锁定。所有这些都是在Zend Framework下实现的。

=============================================== ==

=== 第二部分:问题被重新定义 ======

我想将我的问题改写为以下内容:

情况1:旧服务器上的旧应用程序:

  1. 打开mysite.com/page1.php
  2. 选择过去3个月的日期范围并提交。
  3. PHP和Mysql需要10分钟才能返回结果
  4. 在等待page1.php完成工作时,我打开一个新的浏览器标签,然后打开mysite.com/page2.php
  5. page2.php立即加载 [page2.php只是简单的Hello World html页面]
  6. 情况2:新服务器上的新应用程序“

    1. 打开myothersite.com/page1.php
    2. 选择过去3个月的日期范围并提交。
    3. PHP和Mysql需要10分钟才能返回结果
    4. 在等待page1.php完成工作时,我打开一个新的浏览器标签,然后打开myothersite.com/page2.php
    5. page2.php不加载。它仅在page1.php完成其工作后加载。 [page2.php只是简单的Hello World html页面]
    6. 所以,我的问题是,这可能是什么原因。 是因为Apache设置的差异?这是否与KeepAlive和持久性设置有关?

      旧服务器上的Apache上的KeepAlive为OFF。 新服务器上未定义KeepAlive。

      是否有任何其他Apache设置或PHP设置可能导致此行为?

0 个答案:

没有答案