2010-11-24 50 views
1
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后数据来的功能,但它继续其他代码。我的意思是return false没有打破它。无法打破jQuery的功能,当有一个AJAX后

我在哪里错了?

感谢

回答

1

这是一个异步调用,所以它不会按照您的预期工作 - 当数据从服务器返回时,检查并返回false将运行,但代码的其余部分无论如何都会运行。如果您想等待结果,或者将其他代码放入发布的函数中,您应该尝试使用async = false的jQuery.ajax。

$.post("function.php?act=check_id", { id: id }, function(data) {   
    if (data != "error") { 
    // some other code 
    } 
}); 
1

听起来像你想的AJAX调用是同步的,这是可以做到,但仍留下异步的默认设置可能是最好的处理代码当Ajax调用是通过回调方法(完即完成,成功,错误处理程序)。基本上,如果您使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 
}); 
+0

我可以做只是为了特定的帖子或页面中所有的帖子? – 2010-11-24 18:06:36

+0

这太奇怪了。 ... [A] jax呼叫是同步的。 – scottm 2010-11-24 18:07:38

1

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

任何代码其执行(或缺乏)依赖于来自AJAX调用的响应需要放置内部回调(或放置在由回调执行的功能)。

2

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

AJAX = 异步 JavaScript和XML