我想在“return false”行之后停止执行javascript代码,但事实并非如此。
我的英语很差。如果有人理解我,请改进我的问题谢谢!
$('#category-list input').blur(function(){
var $$ = $(this), $p = $$.prev();
if ($$.val() != $p.html()) {
var data = {'key':$$.attr('name'),'value':$$.val()};
$.post('<?php echo Url::to(['field']); ?>', data).done(function(result){
if (result != 'ok'){
alert(result);
return false; /*i need it stop at here!!!!!! but it not*/
}
});
alert(3);
$p.html($$.val());
}
$$.hide();
$p.show();
});
答案 0 :(得分:2)
简短的回答是你无法在ajax完成函数中停止父函数,因为在函数本身执行完毕后很可能会触发它。无论如何,它的2个独立事件
$.post
是一个异步的ajax请求。这意味着,在ajax请求返回后,函数的.done()
部分将执行。
但是,函数的其余部分同步运行,这意味着.post
之后的每个(或某些)代码行将在服务器响应之前运行。要解决这个问题,您需要重新设计执行函数的方式。
让我们用一个基本功能来检查它:
function getSomeAjax() {
//1 - the alert will execute first
alert('first line of execution');
//2 - the post request will execute second
$.post('someUrl', data).done(function(result){
if (result != 'ok'){
alert('post request complete');
//this will execute randomly whenever the server responds.
//it could be in 1 second, 5 seconds, or 20 seconds
}
});
//3
alert('last line of execution');
}
查看上面的示例,您应该将依赖于服务器响应的任何逻辑移动到if子句中。否则无论你的帖子请求如何都会执行