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 时,我可以看到数据返回“true”,但调用函数 - var result = my.data.getAuth(username,password); 返回未定义。任何想法?

4

2 回答 2

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不建议使用。

于 2013-04-29T07:55:59.280 回答
0

两个原因: 1. 将 ajax 切换为 时async: false,不应将success: function(){...}属性传递给选项哈希。而不是这个,你应该使用链。2.当你returnsuccess函数中使用时,你只从函数返回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' );
});
于 2013-04-29T08:31:35.410 回答