【问题标题】: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 请求返回任何内容,而只是发送了一些内容。

标签: php javascript ajax xmlhttprequest


【解决方案1】:

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

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

【讨论】:

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

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

默认值为 false。

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

【讨论】:

    猜你喜欢
    • 2014-12-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多