我目前正在开发一个拥有庞大数据库的CRM系统。 如果用户想要搜索客户,他可以使用ajax搜索。每次他在搜索字段中更改某些内容时,当呼叫处于待处理状态时,旧呼叫将被取消,并且新呼叫将被发送到服务器。 我的问题是,服务器端的php进程继续运行。因此,如果用户开始输入地址,则会启动和取消多个请求,服务器需要越来越多的时间来回答。
当ajax调用被取消时,是否可以取消正在运行的php进程? 或者在服务器端是否有可能的解决方案,以检测来自同一用户的搜索请求是否正在运行并在启动新请求之前将其取消?
提前感谢您的回答。
答案 0 :(得分:4)
你的服务器端php必须输出一些东西来检测请求被取消。但是,由于您可能执行冗长的SQL查询,因此无法输出任何内容。
但是您仍然可以将您的连接ID保存到会话中,并在检测到连接时终止连接:
答案 1 :(得分:3)
您在寻找ignore_user_abort()吗?
答案 2 :(得分:1)
谢谢大家的回答。
我像Anigel建议的那样重新设计了我的搜索查询,结果令人难以置信。
但我认为我的问题的正确答案是Marek和Harikrishnan Viswanathar的答案。两者都应该按照我的要求行事。
答案 3 :(得分:0)
我现在想出了一个解决方案。
您可以在发送ajax请求时设置布尔值isPending
,您可以将此值设置为true
调用ajax回调(成功或错误)后,您可以将isPending
设置为false;
此外,您可以拥有字符串变量searchContent
并在更改文本时更新此变量。因此,当Ajax Call未挂起且searchContent具有内容时,您可以发送另一个ajax调用。
最好的选择是使用已编写的解决方案,例如:http://jqueryui.com/autocomplete/它非常简单,而且它甚至已经内置了缓存系统。