PHP & jQuery ajax 调用无需等待响应

Posted

技术标签:

【中文标题】PHP & jQuery ajax 调用无需等待响应【英文标题】:PHP & jQuery ajax call without waiting for response 【发布时间】:2013-03-25 20:57:00 【问题描述】:

我正在为某事苦苦挣扎。

我有一个 php 页面,它使用 jQuery $.ajax 对另一个页面进行 ajax 调用。它将请求异步发送到处理页面,然后返回响应。

现在这工作正常,但我们正在对后端进行一些更改,现在运行的处理(SQL 存储过程)需要更长的时间,比如 5 分钟以上。等待很好,因为我们正在处理 SQL 中接近 200MM 的记录。

问题是我需要能够将请求发送到处理页面,而不必等待响应。处理页面触发 PHP 中的存储过程,如下所示:

            $query = $dbh2->prepare('exec sp_name :countID');
            $query->bindParam('countID', $countID);
            $query->execute();

现在,存储过程需要一段时间才能运行,我们不需要将结果返回给用户。虽然在存储过程之后需要运行一些额外的 PHP 代码,但也不需要将任何内容发送回浏览器。

我正在尝试找出一种方法,可以调用处理页面并运行存储过程和其他代码,但用户的浏览器不需要等待响应。现在如果尝试过早点击关闭页面,它基本上会锁定浏览器一段时间并且不会完成处理。

对此的任何见解都会很棒。

提前感谢您的帮助。

【问题讨论】:

可能使用php.net/manual/en/function.exec.php,然后用它在服务器上执行一个文件,然后返回'ok'给浏览器。 我想你想要的是异步 PHP 调用?[***.com/questions/124462/asynchronous-php-calls] 【参考方案1】:

Sequenzia,如果我理解正确的话,那么经过大量研究,我已经来到这里并找到了通过这个泥潭的方法。

几个月前,我提供了一个类似问题的答案。不幸的是,OP 和其他任何人都没有接受/评论/upvoted/downvoted - nada。

Run a batch file from my website

这里有一些有用的参考资料:

运行后台脚本(unix 命令)

参考:http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/ 参考:http://www.mathinfo.u-picardie.fr/asch/f/MeCS/courseware/users/help/general/unix/redirection.html

如何编写 PHP $shortopts 和 $longopts

这是在从命令行运行时解释传递给 PHP 脚本的参数的方法,或者使用 shell-exec() 从另一个 PHP 脚本传递的参数

参考:http://www.php.net/manual/en/function.getopt.php

【讨论】:

【参考方案2】:

您可能会考虑为$.ajax() 方法设置timeout 选项。通过设置半秒或其他的超时,ajax 将超时并进入错误处理程序(如果有)。

【讨论】:

感谢您的帮助。我尝试在 $.ajax() 请求上设置超时,它确实超时并触发错误处理程序,但浏览器仍然锁定,直到进程完成。对此有何其他想法?

以上是关于PHP & jQuery ajax 调用无需等待响应的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Ajax & jsonp

JQUERY关于无刷新页面

如何使用 AJAX/JQuery 调用多个 PHP 脚本?

jquery ajax php 调用方法!

如何保护 PHP/JQuery/Ajax 调用?

jquery ajax请求成功,但是进入了success,但是返回的数据data为空