2011-04-05 62 views
0

我知道我的問題是什麼,我只是不能解決問題。成功觸發jQuery ajax問題

我有一個嚮導,基本上是一個5頁的形式。在每個頁面上,我會進行各種驗證,如果驗證匹配「頁面」被隱藏並顯示下一頁。

$('#wizard-2 .continue').click(function() { 
    // Validation Here 
    $('#wizard-2').hide(); 
    $('#wizard-3').show(); 
}); 

我的問題是,其中一個驗證功能需要ajax調用。

$.ajax({ 
    // Misc stuff 
    success : function (bool) { 
    if (bool == 0) { 
     // Show Error 
     return false; 
    } 
    } 
}); 

我需要發生的是腳本等待Ajax調用來完成,如果成功,函數返回false,那麼它需要停止腳本。

如果我使用的是真實表單,我會將表單提交到成功函數中,並且避免在ajax之後直接執行默認操作。顯然,這不起作用,因爲在嚮導的最後一頁完成之前不應該提交表單。

任何想法?

+0

舊版本了jQuery的驗證插件不玩漂亮的jQuery的新版本。這是因爲他們混淆了全局'ajaxSetup()'。升級到jQuery.validate> = 1.7修復了這個我相信。你認爲這可能是原因嗎? – 2011-04-05 15:39:49

回答

1

您可以在您的.ajax調用中嘗試設置async: false以防止異步調用發生。這當然會減慢你的頁面,但是是一種選擇。

另一種選擇是在確認後,將ajax調用的內容放入一個函數中,這個函數可以調用成功。不知道它是什麼我不能畫出一個確切的選項,但肯定

$('#wizard-2').hide(); 
$('#wizard-3').show(); 

將成爲它的一部分。

0

你可以把你的隱藏/顯示的代碼放在回調函數裏面嗎?所以,只有當它返回成功,它纔會顯示'表單'中的下一頁。

從本質上講,AJAX是一個異步調用,所以在調用返回時發生某種事情的最佳方式是將其放入或從回調函數中調用它。

1

AJAX是異步的;你不能那樣做。

從技術上講,你可以,但它會凍結瀏覽器; 不要

你應該改變你的驗證採取的回調,而不是返回一個布爾值的:

function validate(callback){  
    $.ajax({ 
     success : function (bool) { 
      if (bool == 0) { 
       //Do soemthing 
       callback(false); 
      } else 
       callback(true); 
     } 
    }); 
} 
1

我會嘗試這種方式:

1)定義一個函數來執行也需要一個驗證回調類型函數的參數。

2)在click事件中,使用應在成功事件中執行的函數調用驗證函數。

喜歡的東西:

$('#wizard-2 .continue').click(function() { 
    // Validation Here 
    processWizard(function(){ 
     $('#wizard-2').hide(); 
     $('#wizard-3').show(); 
    }); 

}); 

function processWizard(callback){ 
    $.ajax({ 
     // Misc stuff 
     success : function (bool) {  
      if (bool == 0) {  
       // Show Error  
       return false;  
      } 
      else{ 
       callback(); 
      } 
     } 
    }); 
}