代码之家  ›  专栏  ›  技术社区  ›  Utku Dalmaz

有ajax post时不能中断jquery函数

  •  1
  • Utku Dalmaz  · 技术社区  · 14 年前
    var id = $("input#user_id").val();
    
    if (id != "") {
       $.post("function.php?act=check_id", { id: id }, function(data) {     
           if (data == "error") {                    
               return false;
           }
       });
       //some other codes going on here....
    

    如您所见,我试图将函数分解为来自ajax post的数据,但它一直在执行其他代码。我是说 return false 别弄坏它。

    我错在哪里?

    谢谢

    4 回复  |  直到 14 年前
        1
  •  1
  •   Marek Sapota    14 年前

    这是一个异步调用,因此无法按预期工作-当数据从服务器返回时,将运行check和return false,但其余代码仍将运行。如果您想等待结果,应该使用async=false尝试jQuery.ajax,或者将其他代码放在给定的post函数中。

    $.post("function.php?act=check_id", { id: id }, function(data) {        
      if (data != "error") {
        // some other code
      }
    });
    
        2
  •  2
  •   Orbling    14 年前

    下面的代码需要进入 $.post() 函数,因为它在返回时执行。AJAX调用之后的代码在返回之前执行。

    阿贾克斯= 异步的 JavaScript和XML

        3
  •  1
  •   user113716    14 年前

    您正在进行异步AJAX调用。你试图阻止的代码 return false; 在响应返回之前很久执行。

    执行(或缺少)依赖于AJAX调用响应的任何代码都需要放置 里面 回调(或放在回调执行的函数中)。

        4
  •  1
  •   John Hartsock    14 年前

    听起来您希望AJAX调用是同步的,这是可以完成的,但仍然保留异步的默认设置可能是最好的,并且在AJAX调用通过回调方法(即completed、success、error handlers)完成时处理代码。基本上,如果您使AJAX调用同步,您将不知道请求需要多长时间,这将锁定浏览器直到请求返回。对于大型AJAX请求,这是非常不可取的。

    对jQuery AJAX调用的一些引用

    http://api.jquery.com/jQuery.ajax/

    如何使AJAX对所有AJAX调用同步运行

    $.ajaxSetup({async:false});
    

    如何使AJAX为一个AJAX调用同步运行

    $.ajax({
      async: false,
      type: 'POST',
      url: url,
      data: data,
      success: success
      dataType: dataType
    });