开发者社区 问答 正文

重定向到PHP中的另一个页面后如何继续运行ajax调用?

重定向到PHP中的另一个页面后如何继续运行ajax调用?

我的AJAX调用执行非常复杂的任务,它需要一个长期所以,是否有可能运行一个AJAX调用后页面重定向?

我在单击提交按钮时进行ajax调用,然后在该页面上重定向到另一个页面,然后我的ajax调用是“在后端继续运行”。

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <title></title>
</head>
<body>
  <input type="text" name="altname" id="altname">
  <button id="btnSubmit">Submit</button>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(){
    $(document).on('click','#btnSubmit',function(){ 
    var altname = $("#altname").val();
        $.ajax({
            url:"http://localhost/z/backend-queue-job-php/queue_job.php",
            type:"POST",
            data:{altname:altname},
            success:function(result)
            {   
                alert(result.msg);
            }
        });
        window.location.href = "http://localhost/z/backend-queue-job-php/thankyoupage.php";
    });
}); 
</script>

展开
收起
社区秘书 2019-12-09 15:41:07 771 分享 版权
阿里云 AI 助理回答

在PHP中,重定向到另一个页面后直接继续运行原来的AJAX调用是不可能的,因为浏览器会跟随重定向到新的URL,从而终止与原页面的连接。但是,你可以通过以下几种策略来实现类似的需求:

  1. 异步任务队列:将长时间运行的任务放入后台任务队列中执行。当AJAX调用触发时,你的PHP脚本可以简单地将任务添加到队列(如使用RabbitMQ、Redis队列或阿里云的MQ服务),然后立即返回成功响应进行重定向。之后,你可以在服务器端单独处理这个队列中的任务,完成后可以通过邮件、数据库记录或者另一个AJAX轮询/长轮询的方式来通知前端任务已完成。

  2. Web Workers(仅限于前端操作):如果任务是纯JavaScript且支持Web Workers,你可以在重定向前启动一个Web Worker来执行复杂的任务。但请注意,这不适用于需要服务器端处理的情况。

  3. 长轮询或Server-Sent Events (SSE):在新页面上设置一个长轮询或SSE连接,用来检查后台任务的状态。一旦任务完成,服务器可以通过这个连接向客户端推送消息。

  4. Callback URL或Polling:在发起AJAX请求时,可以提供一个callback URL。当长时间运行的任务在服务器端完成时,服务器向该URL发送一个请求,告知任务已完成。前端页面可以在加载时检查特定状态或通过定期轮询来得知这一结果。

  5. 使用阿里云函数计算(FC)或Elastic Compute Service (ECS)实例:如果你的任务适合无服务器架构,可以考虑使用阿里云函数计算来处理这些长时间运行的任务。函数计算会在任务完成后根据配置触发后续动作,比如调用API来更新数据库或发送通知。

结合阿里云产品,推荐采用异步任务队列的方式,利用阿里云的消息队列服务来解耦前后端,确保即使用户已经导航到其他页面,后台任务也能持续执行并最终通知用户结果。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答