如何插入在后台运行的慢速 ajax 请求
How can I interrup slow ajax request, running in background
情况:
-
用户访问一些快速加载页面,该页面向一些慢速PHP脚本发出AJAX异步请求,例如加载30秒
-
3秒后,用户点击某个链接转到另一个快速加载页面,但浏览器等待27秒完成AJAX请求以慢脚本,然后才开始加载下一页
你怎么能解决这个问题?如何告诉Web服务器中断处理请求,从定义的AJAX调用开始?
abort() 不是解决方案
.PPS。代码示例:我的页面包含商店产品的过滤器,其加载时间比其他页面组件更长。缓存第一个加载过滤器后 - 下次加载速度很快。因此,当页面加载时,我不显示过滤器,而是添加一个JS,该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
session_start();
?>
<div id="catalog_filter_container">
<?if($_REQUEST['SHOW_FILTER'] == "Y") {
$_SESSION['filter_content'] = 'bla bla bla';
}
else {
echo $_SESSION['filter_content'];
}
?>
</div>
尝试使用 cron 作业独立于页面加载运行查询,并将结果缓存在服务器上。然后让 AJAX 请求返回缓存的内容。
相关文章:
- Javascript-如何让脚本与Ajax请求的数据一起运行
- Koa.js中止运行请求
- 在Flask中使用.getJSON请求时,只运行一次命令
- 如何在node+express中重新运行请求处理程序
- 在安装后首次运行应用程序时从 UIBebView 发出 jQuery Ajax 请求
- 防止请求动画帧一直运行
- [XSS]Expressjs 阻止从 POST 请求运行脚本
- 当ajax请求发生时运行代码的Chrome扩展
- 中止以前运行的Ajax请求
- 在document.ready jquery上运行ajax请求
- 无法连接到网络服务器.验证 Web 服务器是否正在运行,并且传入的 http 请求未被防火墙阻止
- 循环遍历 Angular HTTP 请求中的对象,等到响应后再运行下一个循环
- 将 CORS 请求发布到运行 sailsjs 的 HTTPS 域
- 我可以/如何显式终止长时间运行的 xhr 请求
- 如何注册要在更新面板请求完成时运行的函数
- 在运行应用并切换到路由或状态之前解决$http请求
- AJAX 可访问的长时间运行的服务任务阻止在启用 ASP.NET 兼容性/会话的环境中的后续 AJAX 服务请求
- 阻止其他代码运行,直到 AJAX 请求返回某些内容
- Ajax Post请求总是运行错误功能,尽管卷曲到相同的url工作正常
- 运行请求,直到响应是用$q请求的