Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何中断在后台运行的缓慢ajax请求_Javascript_Php_Jquery_Ajax_Interrupt - Fatal编程技术网

Javascript 如何中断在后台运行的缓慢ajax请求

Javascript 如何中断在后台运行的缓慢ajax请求,javascript,php,jquery,ajax,interrupt,Javascript,Php,Jquery,Ajax,Interrupt,情况: 用户访问某个快速加载页面,该页面向某个缓慢的PHP脚本发出AJAX异步请求,例如加载30秒 3秒钟后,用户单击一些链接转到另一个快速加载页面,但浏览器等待27秒钟完成AJAX请求以降低脚本速度,并且只有在这之后才开始加载下一个页面 你如何解决这个问题?如何告诉web服务器中断处理请求,从定义的AJAX调用开始 PS.abort()不是解决方案 PPS。代码示例:“我的页面”包含商店产品的过滤器,其加载时间比其他页面组件长。在缓存第一个加载筛选器之后-下一次加载速度很快。所以当页面加载

情况:

  • 用户访问某个快速加载页面,该页面向某个缓慢的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;?>

... 过滤代码在这里。。。
$(文档).ready(函数(){
$.ajax({
网址:“
})
.done(函数(html){
$(“#目录#过滤器#容器”).append($(html).find(“#目录#过滤器#容器”);
});
});

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

如下所示:(如果您想要实现的是在未设置筛选器时存储要筛选的值,并在设置筛选器时显示筛选器中的值)



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

您可以发布您正在使用的代码吗?AJAX请求是异步的,第二点是如何发生的?也许向我们展示一些代码会有所帮助。另外,附带问题:一个php脚本如何花费30秒?除非必须这样做,否则不应进行如此繁重的详细说明,否则加载特定页面的每个用户都可能会遇到更长的加载时间。您是说设置超时间隔吗?web请求应该是异步的,以便客户端不必等待。也就是说,我不知道有一种默认方式可以让服务器中断其工作。显然,即使连接关闭也不会停止所有web服务器上的服务器端处理。也就是说,如果您使用“任务唯一id”,您可以向服务器发送请求(与第一个请求并行),让服务器停止正在进行的任务。如果没有看到任何代码,就无法向您提供反馈,因此请给我们一些代码,以便我们可以帮助您:-)
<?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>