离开页面时 Ajax 请求是不是仍然完成?

Posted

技术标签:

【中文标题】离开页面时 Ajax 请求是不是仍然完成?【英文标题】:Do Ajax requests still finish when leaving the page?离开页面时 Ajax 请求是否仍然完成? 【发布时间】:2013-05-07 06:35:08 【问题描述】:

我有一个需要运行一些 php 的情况,特别是我需要发送一个 SOAP 请求并等待响应,然后对此进行处理,但是有时这些请求可能很慢并且最多需要 9秒。

现在我真的不希望用户坐在那里等待 9 秒以完成此操作。

基本上用户流是..

用户进入支付页面 用户点击按钮通过支付网关(Paypal)支付 然后用户返回到站点(SOAP 请求以及在此阶段需要完成的所有工作)

我曾考虑使用 Paypal IPN 通知来运行它,但后来认为在用户返回网站时它不会完成。

所以,我想知道我是否可以在用户通过 Ajax 访问第一页时发出呼叫,并在用户提交付款时运行它,并且在他们返回网站时应该完成 - - 如果他们最终没有完成付款,这没什么大不了的,所以我不担心在确认付款之前运行此代码。

我的问题是,如果我将其关闭以通过 AJAX 运行,如果用户在页面完成之前离开页面,代码是否仍会执行?如果没有,有什么想法吗?

【问题讨论】:

在 ajax 完成之前不要将它们发送到贝宝。 这样您就可以确认ajax请求已成功发送和接收,没有任何问题。另外,假设您正在发送 Ajax 请求并同时将它们发送到贝宝;您不希望 ajax 请求不发送(因为竞争条件) @kennypu 我不会同时这样做。一旦他们进入支付页面,该功能就会运行,然后他们就可以点击支付按钮。 :) 在这种情况下,您不必担心任何事情,特别是如果您没有从 ajax 请求返回任何内容,而只是发送了一些内容。 【参考方案1】:

一旦请求发送到服务器,无论您是否离开页面,请求的服务器端都会完成。

唯一不会发生的是客户端回调方法的执行。

【讨论】:

好的,没什么需要发回给客户端的,所以我猜应该是安全的:)【参考方案2】:

如果您使用 php ,则有一个 php.ini 设置 ignore_user_abort 告诉 php 当客户端中止请求时该做什么。

默认值为 false。

http://www.php.net/manual/en/misc.configuration.php#ini.ignore-user-abort

【讨论】:

以上是关于离开页面时 Ajax 请求是不是仍然完成?的主要内容,如果未能解决你的问题,请参考以下文章

用户离开页面后php执行是不是停止?

离开页面时如何处理jQuery ajax发布错误

离开页面时如何处理jQuery ajax发布错误

Ajax请求处理浏览器超时+ PHP长进程

$(window).unload 在离开网页之前等待 AJAX 调用完成[重复]

如何判断页面内容是不是被修改过