如何插入在后台运行的慢速 ajax 请求

How can I interrup slow ajax request, running in background

本文关键字:运行 请求 ajax 后台 何插入 插入      更新时间:2023-09-26

情况:

  • 用户访问一些快速加载页面,该页面向一些慢速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 请求返回缓存的内容。