如何从javascript(ajax)中止laravel(php)执行?
我有js代码:如何从javascript(ajax)中止laravel(php)执行?,javascript,php,jquery,laravel,laravel-5.2,Javascript,Php,Jquery,Laravel,Laravel 5.2,我有js代码: $('#button').on('click', function(e){ console.log('start'); if(xhr != ''){ console.log('terminate'); xhr.abort() }else{ console.log('NOT terminate'); } xhr = $.ajax({ url: url, met
$('#button').on('click', function(e){
console.log('start');
if(xhr != ''){
console.log('terminate');
xhr.abort()
}else{
console.log('NOT terminate');
}
xhr = $.ajax({
url: url,
method: method,
success: function(json) {
console.log(json);
},
});
console.log('end');
return false;
});
和服务器laravel代码:
public function update(Request $request)
{
DB::transaction(function () {
sleep(10);
Product::find(1)->increment('user_id');
});
return 'test';
}
当我双击按钮时,输出为:
start
NOT terminate
end
start
terminate
end
test
user_id最初为1,但执行后为3,但我希望为2。那么如何从javascript终止(中止)laravel执行呢?如果要中止当前的AJAX请求,必须将
xhr
变量声明为全局变量
但是,如果您想在双击时执行1个AJAX请求,为什么不尝试使用dblclick
事件呢
不能从javascript内部终止php执行,它们是异步的。每个ajax请求都会启动一个服务器端php处理,通常会返回一个响应。但是javascript在发送请求后无法控制服务器端php。2次单击=2次调用事件=2次执行ajax,因此2次递增=1+1+1=3,更改事件,而不是单击使用
dblclick
event。@Troyer我正在寻找从javascript终止php执行的机制,上面这只是一个简单的例子,没有解释我为什么需要这个…没有办法从JS停止PHP服务器端执行,您可以在ajax中添加更多参数来创建ajax函数控制器上的条件:)可能在JS中创建名为“counter”的全局变量,然后在第一次单击后递增它。然后检查计数器==1?setTimeout(()=>{},3000):