【问题标题】:How can I interrup slow ajax request, running in background如何中断慢速 ajax 请求,在后台运行
【发布时间】:2016-02-05 17:48:16
【问题描述】:

情况:

  • 用户访问某个快速加载页面,该页面向某个慢速 PHP 脚本发出 AJAX 异步请求,例如加载 30 秒

  • 3 秒后用户点击某个链接转到另一个快速加载页面,但浏览器等待 27 秒完成对慢速脚本的 AJAX 请求,然后才开始加载下一页

你如何解决这个问题?如何告诉 Web 服务器中断处理请求,从定义的 AJAX 调用开始?

PS。 abort() 不是解决方案

PPS。代码示例:我的页面包含商店产品的过滤器,加载时间比其他页面组件长。在第一次加载过滤器被缓存后 - 下一次加载速度很快。所以当页面加载时,我不显示过滤器,而是添加一个 JS,使用 AJAX 再次调用当前页面,添加一些参数(SHOW_FILTER)。如果页面收到此参数 - 它显示过滤器...

<div id="catalog_filter_container">
    <?if($_REQUEST['SHOW_FILTER'] == "Y"):?>
        ... filter code here ...
    <?endif;?>
</div>
<?if($_REQUEST['SHOW_FILTER'] != "Y"):?>
    <script type="text/javascript">
        $(document).ready(function(){
            $.ajax({
                url: "<?=$APPLICATION->GetCurPageParam("SHOW_FILTER=Y", array("SHOW_FILTER")); // get cur URL with adding param SHOW_FILTER=Y ?>"
            })
            .done(function(html) {
            $("#catalog_filter_container").append($(html).find('#catalog_filter_container'));
            });
        });
    </script>
<?endif;?>

【问题讨论】:

  • 你能发布你正在使用的代码吗?
  • Ajax 请求是异步的,第二点是怎么回事?也许向我们展示一些代码可能会有所帮助。另外,附带问题:php 脚本如何花费 30 秒?除非是必须的,否则不应进行如此繁重的阐述,否则每个加载该特定页面的用户都可能会遇到更长的加载时间。
  • 你说的是设置超时间隔吗?
  • 网络请求应该是异步的,这样客户端就不必等待了。话虽如此,我不知道让服务器中断其工作的默认方式。显然,即使连接关闭也不会停止所有 Web 服务器上的服务器端处理。话虽这么说,如果您使用“任务唯一 ID”,您可以向服务器发送请求(与第一个请求并行)以使其停止正在进行的任务。
  • 没有看到任何代码就不可能给您反馈,所以请给我们一些代码,以便我们为您提供帮助:-)

标签: javascript php jquery ajax interrupt


【解决方案1】:

如果我对您的理解正确,则不必进行 ajax 调用,因为无论如何都会重新加载页面。这似乎是您只能在服务器端执行的操作(使用会话)。

类似这样:(如果您想要实现的是在未设置过滤器时存储要过滤的值,并在设置时显示来自过滤器的值)

<?php
session_start();
?>
<div id="catalog_filter_container">
<?if($_REQUEST['SHOW_FILTER'] == "Y") {
    $_SESSION['filter_content'] = 'bla bla bla';
}
else {
    echo $_SESSION['filter_content'];
}
?>
</div>

【讨论】:

    【解决方案2】:

    尝试使用 cron 作业来运行与页面加载分开的查询,并将结果缓存在服务器上。然后让您的 AJAX 请求返回缓存的内容。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2016-09-19
      • 2010-12-24
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      相关资源
      最近更新 更多