如何在jquery $ .post中停止?

时间:2015-10-22 03:11:49

标签: javascript jquery

我想在“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();
    });

1 个答案:

答案 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子句中。否则无论你的帖子请求如何都会执行