2011-06-06 104 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