【发布时间】: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