0

我的情况是我有一个页面,卖家要接受客户的订单,在客户下订单后,卖家点击确认按钮并等待客户通过他的身份证,我用 ajax 请求做并弹出一个包含产品列表、消息和取消按钮的对话框。

在服务器端发送我的 ajax 后,我正在做一个带有“睡眠”的“for”来检查用户是否通过了他的卡,然后如果他有,我将这些项目放入他的账单中(保存到数据库中)。问题是,如果用户决定取消进程,我无法让取消 ajax 请求工作,因为它忙于服务器端的第一个请求并等待它的返回。

有人对此有什么建议吗?我真的希望网站的工作流程是这样的:

客户订单 -> 卖家添加商品并点击确认 -> 客户通过确认或卖家可以取消 -> 过程结束

4

1 回答 1

2

即使有一种简单的方法可以按照您的方式进行操作,但在多次连接之后,此过程也会很快使服务器不堪重负。

我会在要求客户身份识别之前将客户的订单存储到数据库中,订单上的状态字段设置为“等待身份识别”,或者类似的东西。然后您可以继续识别流程,而无需等待 PHP 脚本,并节省大量资源。

如果客户不小心断开了连接,您仍然可以保存她的订单,并且可以让她在以后完成识别。

最后,当客户端成功完成识别时,您可以简单地将订单的状态字段更新为“已验证”,以表明它已准备好进行处理。


编辑:要解决您的特定问题,请考虑以下流程:

  1. 您将订单保存为“待识别”并显示“等待...”对话框。

  2. 您每隔几秒钟执行一个非常简单的请求,询问订单状态是否已更改,以了解对话框何时需要关闭。

  3. 在某些时候,识别设备会发送一个确认请求,您可以根据该请求检索订单并更改其状态。然后,您在第 2 步中实现的定期调用将启动并隐藏对话框。

会话不是作为临时存储介质的好位置,但 Redis、Memcached 或类似服务可以帮助您简化该过程,因为设备和站点可以以某种方式共享信息。

于 2012-08-02T13:07:16.600 回答