2011-06-06 106 views
1

我通過jQuery AJAX調用了web服務。 Web服務返回「True」作爲輸出。
我想返回一個函數的返回值。但它返回undefined。
問題的根源在哪裏?
函數IsAuthenticated返回undefined,但是response.d包含'True'值(它的字符串)。返回如果函數返回jQuery AJAX輸出

function IsAuthenticated() { 
     //Todo Check If user logined or not from server 
     return CallWebService("Server/WebServices/Server.asmx/IsUserLogined", '{}'); 
    } 
    function CallWebService(WebServicePath, parameters) { 
     $.ajax({ 
      type: "POST", 
      url: WebServicePath, 
      data: parameters, 
      async: false, 

      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (response) { 
       alert(response.d); 
       if (response.d == 'True') { 

        return true; 
       } 
       else 
       { return false; } 
      }, 
      failure: function (msg) { 

       alert("error"); 

      } 
     }); 
+0

的(http://stackoverflow.com/questions/1632039/return-value-from-ajax-call)可能重複和許多其他。 – lonesomeday 2011-06-06 06:03:48

回答

2

我看到您正在使用async:false選項來使ajax調用同步。

但是,成功函數仍然是一個回調函數,並且從成功處理函數返回true將不會返回作爲ajax函數調用結果的值。

您需要將輸出捕獲到本地變量中並將其返回。

試試這個:?從Ajax調用返回值]

function CallWebService(WebServicePath, parameters) { 
    var retValue = null; 
     $.ajax({ 
      type: "POST", 
      url: WebServicePath, 
      data: parameters, 
      async: false, 

      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (response) { 
       alert(response.d); 
       if (response.d == 'True') { 
         retValue = true; 
       } 
       else 
       { retValue = false; } 
      }, 
      failure: function (msg) { 
       alert("error"); 
      } 
     }); 
     return retValue; 
} 
+0

謝謝,我確實重視異步到錯誤,是不是? – Shahin 2011-06-06 06:13:48

+0

儘管我不會建議讓ajax調用syncronous,但是您的調用是同步的,只需更改代碼以便在成功處理程序中接收調用的值並將其分配給在ajax之後返回的局部變量方法說明 – Chandu 2011-06-06 06:16:23