php - 取消Axios请求时如何在Laravel中停止php脚本?

标签 php laravel axios

我正在使用 Laravel、VueJs 和 axios 进行实时搜索,因此每次用户输入新词时,之前的请求都会被取消。我的问题是,即使我使用取消 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);
    }
    ...
}

最佳答案

我不确切知道 Axios 取消是如何工作的,但是如果客户端断开 HTTP session (应该如此),您可以尝试使用 ignore_user_abort设置。

public function Search(Request $request)
    {
        ignore_user_abort(false);
        $query = $request->input('query');
        $accounts = Accounts::search($query, null, true, true)->get();
        return response()->json($accounts);
    }

其他有用的功能可能是:

connection_status : 检查当前连接状态

connection_aborted : 检查连接是否被取消


我只是想补充一点,你的功能似乎不是很密集,所以我不确定这样的检查有多大用处。正如 Tauqeer 在评论中建议的那样,在这些情况下通常的方法是对您的 javascript 搜索功能应用去抖动,以便仅在用户完成输入时触发请求。

使用 lodash 的示例:


const search = (query) => {
    .. your axios request ...
}

const fetchData = _.debounce(search, 300) 

现在,只要用户输入内容,您就可以调用 fetchData(query),它只会在用户停止输入 300 毫秒后发送请求

关于php - 取消Axios请求时如何在Laravel中停止php脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62019145/

相关文章:

php 解析带样式的 h 标签

php - 我该如何做这个sql过滤结果

laravel - 我应该在 Laravel 中嵌套资源的路由吗?

node.js - React、node js、mongoDB - 如何使用 FormData 进行发布、放置、删除?

vue.js - 在 vuex 操作中具有多个参数的 Axios post 请求

php - 在 Woocommerce 存档页面上将产品标题移到产品图片上方

javascript - 在 vuejs 和 laravel 中循环显示特定的 div `@click`

php - Laravel 数据库调用返回时什么都没有?

typescript - 如何处理 axios httpservice observable 响应?

php - 在 PHP 中获取扩展类的当前工作目录