2014-03-03 91 views
0

試圖使用返回true或false的函數,並且還包含一些ajax。調用一個函數並等待,直到返回響應才繼續?

我調用一個函數期待一個真或假的回覆:

if(stepIsValid(stepName) == true) { 
//Do Something 
} 
else doSomethingElse(); 

函數「stepIsValid()」做了一些檢查,然後請求通過AJAX額外信息。然後返回true或false:

function stepIsValid(stepName) { 
    var isValid = true; 

    if(condition) { 
     isValid = false; 
    } 
    if(condition) { 
     isValid = false; 
    } 
    if(condition) { 
     isValid = false; 
    } 
    if (pub && isbn) { 
     $.post("/index.php/mypath", { isbn: isbn, name: pub }) 
      .done(function(data) { 
       $("#resultElement").val(data); 
       isValid = true; 
       return isValid; 
      }) 
      .error(function(data) { 
       isValid = false; 
       return isValid; 
      }); 
    } 
    else { 
     isValid = false; 
     return isValid; 
    } 

我的問題是,當stepIsValid被調用,jQuery的不等待響應,假設虛實返回之前調用doSomethingElse()。

解決此問題的最佳方法是什麼?

代碼確實返回true但不夠快。

這兩個函數都在單獨的文件中。

(假設條件,酒吧,ISBN都接上水管和可用)

+0

您無法從ajax請求回調中返回值 –

+0

3個第一個條件返回false爲什麼您不使用「或」? if(condition || condition || condition){isValide = false} 或者你可以只是declar isValidate = false,並在那種情況下,我返回true? 使用3行代替所有這些行! 然後我會很清楚地發現你的錯誤;) – Alaeddine

+0

好說明@Alaeddine和它的東西,當我清理我的代碼時我會做。目前,雖然這不在問題的範圍之內。 –

回答

2

嘗試:

function stepIsValid(stepName, callback) { 
var isValid = true; 

if(condition) { 
    isValid = false; 
} 
if(condition) { 
    isValid = false; 
} 
if(condition) { 
    isValid = false; 
} 
if (pub && isbn) { 
    $.post("/index.php/mypath", { isbn: isbn, name: pub }) 
     .done(function(data) { 
      $("#resultElement").val(data); 
      isValid = true; 
      callback(isValid); 
     }) 
     .error(function(data) { 
      isValid = false; 
      callback(isValid); 
     }); 
} 
else { 
    isValid = false; 
    callback(isValid); 
} 

而且隨着使用它:

stepIsValid(stepName, function(valid) { 
    if(valid) { 
     //Do Something 
    } 
    else doSomethingElse(); 
}); 
0

降低你的函數

試試這個:

function stepIsValid(stepName) { 
var isValid = false; 
if (pub && isbn) { 
    $.post("/index.php/mypath", { isbn: isbn, name: pub }) 
     .done(function(data) { 
      $("#resultElement").val(data); 
      isValid = true; 
      return isValid; 
     }) 
     .error(function(data) { 
      return isValid; 
     }); 
} 
} 
+0

對不起,你在這裏做什麼? –

相關問題