2011-02-28 189 views
1
function IsSwap() 
    { 
     var urlString = "<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/GetModelType")%>"; 
     var id = 
      { 
       id : GetGUIDValue() 
      } 
      $.ajax({ 
       type: "POST", 
       url: urlString, 
       data: id, 
       success: function(data) { 
        if (data.toString() == 'SwapModel') 
        { 
         return true; 
        } 
       } 
      }); 

期望的結果是true。我可以在退貨之前提醒,所以我知道這很好。在另一個函數,我試圖讓我的布爾和使用它像這樣:Javascript函數沒有正確返回?

var isSwap = IsSwap(); 
      if (isSwap) 

,並口口聲聲說isSwap是不確定的。爲什麼?

+0

IS isSwap定義?你在初始化之前調用函數嗎? – 2011-02-28 16:04:47

+0

乍一看,你需要逃生者雙引號中urlString變量 – Kyle 2011-02-28 16:05:36

+0

函數或變量?該功能被稱爲罰款是。我可以在return語句之前放置一個alert,並在需要時彈出它。雖然當我將它分配給變量isSwap時,有些事情正在改變爲「真」,以致於在調用中未定義。 – slandau 2011-02-28 16:05:44

回答

3

您正在使用AJAX請求,這是異步的。你不能從ajax請求中返回值。試試這個:

function IsSwap() 
    { 
     var urlString = "<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/GetModelType")%>"; 
     var id = 
      { 
       id : GetGUIDValue() 
      } 
      $.ajax({ 
       type: "POST", 
       url: urlString, 
       data: id, 
       success: function(data) { 
        if (data.toString() == 'SwapModel') 
        { 
         ResultIsTrue(); // call another function. 
        } 
       } 
      }); 

執行後,而不是使用這樣的:

var isSwap = IsSwap(); 
if (isSwap){ 
// Do Somethinh 
} 

試一下:

IsSwap(); 
function ResultIsTrue(){ 
// Do Same Thing 
} 
-2

檢查這一行:

var urlString = "<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/GetModelType")%>"; 

嘗試使用單引號,像這樣:

var urlString = '<%= System.Web.VirtualPathUtility.ToAbsolute("~/mvc/Indications.cfc/GetModelType")%>'; 

你的雙引號內的雙引號是最有可能您的問題。

+0

它使控制器調用絕對正常,並獲得最後的return語句。 – slandau 2011-02-28 16:07:16

+0

-1字符串很好。問題在於Ajax調用是異步的,因此邏輯需要位於成功處理函數中。 – johnhunter 2011-02-28 16:21:34

3

你不能從一個Ajax調用那樣返回。

你在做什麼實質上從內部函數返回true。

你應該只給你打電話的成功方法需要的任何代碼,因爲這是你能保證Ajax調用已經完成了唯一的一次。

+0

如果我設置了ansyc:false,那會起作用嗎? – slandau 2011-02-28 16:07:45

+0

你仍然不能直接返回它,但你可以在IsSwap函數內創建一個局部變量,設置成功後返回。 – 2011-02-28 16:09:22

+1

@slandau不,它不會。 'IsSwap' *不會返回值*,所以默認情況下會得到一個未定義的返回值。 – 2011-02-28 16:10:10

0

AJAX請求是異步的,這意味着IsSwap將響應之前返回到AJAX請求。

無論你需要做的基礎上isSwap,你應該在你的AJAX請求的成功處理程序做的。

UPDATE:這最後一段不正確有關工作,但值得一提的關於同步不被推薦:

或者,你可以讓AJAX請求同步(通過添加async:false到AJAX選項),並保持它是如何擁有它 - 但我不會推薦這個,因爲你的瀏覽器在等待響應時會「凍結」。

+0

它是否同步並不重要,他沒有從IsSwap返回值。 – 2011-02-28 16:12:24