【问题标题】:Lengthy jQuery AJAX request freezes browser冗长的 jQuery AJAX 请求冻结浏览器
【发布时间】:2017-11-17 08:09:48
【问题描述】:

我有一个 AJAX 请求,处理 AJAX 请求既复杂又冗长。问题是这个冗长的请求会冻结浏览器。我的意思是,当 AJAX 请求正在进行时,无论我单击页面上的任何链接/按钮还是在浏览器地址栏中键入同一网站的某个 Url,它什么都不做并继续等待 AJAX 请求响应,一旦 AJAX 响应返回其他进程开始在职的。我将 async: true 与 AJAX 请求一起使用。 这是我正在使用的代码。它是一个简单的页面,只有这个 jQuery AJAX 请求。我的服务器端 PHP。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test Page</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
    <script type="text/javascript">
        $(document).ready(function() {
            $.ajax({
                url: 'http://www.mywebsite.com/doprocessing',
                async: true,
                success: function () {
                    alert('done');
                }
            });
        });
    </script>
</body>

为什么会这样?我该如何解决这个问题?

PS:在你标记这个重复之前,我已经检查了 StackOverflow 上几乎所有类似的问题。在我的情况下没有解决方案有效(尽管大多数情况下的解决方案是使用我已经在使用的 async: true

提前致谢,

【问题讨论】:

  • 请显示您的 JavaScript 文件的其余部分。
  • 你对你的 ajax 请求目标做了什么样的处理?
  • @EM-Creations 我已经更新了帖子,现在发布我的页面的完整 HTML。
  • @Pratansyah 它将邮件发送给不同的人(比如 10 个不同的人),它发送 10 个单独的邮件并且不使用 CC 或 BCC。
  • 主页的正文是从 ajax 目标填充的?如果是这样,请确保在发送 10 封电子邮件之前目标页面的功能正常

标签: php jquery ajax asynchronous


【解决方案1】:

在 ajax 期间同一网站的任何链接都不起作用的原因是您的脚本将会话锁定在服务器中。

您可以不为此脚本使用会话,或者在您确定这是正确的用户等之后完成会话,但在开始发送电子邮件之前(或做任何其他冗长的事情)。

在开始使用 PHP 发送电子邮件之前,请使用 session_write_close()

您也可以实现自己的异步会话处理程序。

【讨论】:

  • 谢谢!像魅力一样工作。使用 session_write_close() 时是否有任何限制或问题需要牢记。这会对Session有影响吗?
  • 是的,$_SESSION 在此脚本中的这一点之后不可用,但没有别的。类似的“服务器锁定”还有另一个非常常见的原因,当您同时向 ajax(或视频文件)发出过多请求并且您的浏览器用尽了允许的套接字(Chrome 为 6)时,就会发生这种情况。
  • 嗯,谢谢! :)
猜你喜欢
  • 2014-10-02
  • 2012-05-29
  • 1970-01-01
  • 2012-09-28
  • 2023-03-10
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多