2010-11-24 27 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