2013-04-29 58 views
0

我有这样的代码:显露的模块阿贾克斯

my.data = function() { 

var getAuth = function (userName, password) { 
     var model = JSON.stringify({ "UserName": userName, "Password": password }); 
     var result; 

     $.ajax({ 
      url: my.baseUrl + "api/AD", 
      type: "POST", 
      data: model, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: false, 
      success: function (data) { 
       result = data; 
       return result; 
      } 
     });   
    } 

    return {  
     getAuth: getAuth 
    } 
}(); 

当我打电话getAuth,我可以看到数据返回“真”,但调用函数 - VAR的结果= my.data.getAuth(用户名,密码);返回undefined。 有什么想法?

+0

@undefine:他设置异步:假 – 2013-04-29 07:56:42

+0

是,我没有注意到这一点。 – undefined 2013-04-29 07:59:50

回答

1

当然,它会返回undefined,返回的值是成功函数。不是getAuth函数的值。你应该更改为:

my.data = function() { 

var getAuth = function (userName, password) { 
     var model = JSON.stringify({ "UserName": userName, "Password": password }); 
     var result; 

     $.ajax({ 
      url: my.baseUrl + "api/AD", 
      type: "POST", 
      data: model, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      async: false, 
      success: function (data) { 
       result = data; 
      } 
     });  
     return result; 
    } 

    return {  
     getAuth: getAuth 
    } 
}(); 

即使此解决方案有效,不建议使用async: false

0

两个原因: 1.当您将ajax切换到async: false时,您不应将success: function(){...}属性传递给选项散列。相反,你应该使用链。 2.当您在success函数中使用return函数时,仅从success函数返回,而不是从getAuth返回。 试试这个:

$.ajax({ 
    url: my.baseUrl + "api/AD", 
    type: "POST", 
    data: model, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    async: false, 
}).success: function (data) { 
    result = data; 
}; 
return result; 

和几个笔记。正如你所知道的切换到async: false会导致很长的延迟。这是不好的做法,它在最近的JQuery版本中已被弃用。相反,你应该使用回调。您getAuth方法的第三个参数可以是一个函数,当查询成功,你应该运行:

var getAuth = function(userName, password, callback){ 
    $.ajax({ 
    url: my.baseUrl + "api/AD", 
    type: "POST", 
    data: {userName: userName, password: password}, 
    success: function (data) { 
     callback(data); 
    } 
    });   
} 

并使用这个喜欢这里:

my.data.getAuth('someusername', 'somepassword', function(data){ 
    alert('It looks like your authorized successfully'); 
});