我正在使用Laravel,VueJs和Axios进行实时搜索,所以每次用户输入一个新词时,之前的请求都会被取消。我的问题是,即使我使用cancel token(https://github.com/axios/axios#cancellation)取消了之前的请求,php脚本仍然在运行。
问:如果axios请求被取消,我如何停止php脚本?
我的Vuejs代码
fetchData(query) {
if(cancel != undefined)
cancel(); // cancel the previous request
axios.get("http://sample-link", {
cancelToken: new CancelToken(function executor(c) {
cancel = c;
}),
params: {
query : query
}
}).then(response => {
console.log(response);
}).catch(error => {console.log(error.message)})
}
...
我的PHP代码
class SearchController extends Controller {
public function Search(Request $request)
{
$query = $request->input('query');
$accounts = Accounts::search($query, null, true, true)->get();
return response()->json($accounts);
}
...
}
2条答案
按热度按时间wn9m85ua1#
我不知道Axios取消是如何工作的,但如果客户端断开HTTP会话(应该),您可以尝试使用
ignore_user_abort
设置。其他有用的功能可以是:
connection_status
:检查连接的当前状态connection_aborted
:检查连接是否已取消我只是想补充一点,你的函数看起来不是很密集,所以我不确定这样的检查有多有用。正如Tauqeer在评论中建议的那样,在这种情况下,通常的方法是对JavaScript搜索函数应用去抖动,以便仅在用户完成输入时才触发请求。
使用lodash的示例:
现在,只要用户键入内容,就可以调用
fetchData(query)
,并且只有当用户停止键入300毫秒时,它才会发送请求l5tcr1uw2#
我只是在我的控制器代码中通过
connection_aborted()
解决了这个问题。