揭示模块ajax

时间:2013-04-29 07:49:53

标签: javascript jquery ajax oop

我有这段代码:

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);返回undefined。 任何想法?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

两个原因: 1.当您将ajax切换到async: false时,不应将success: function(){...}属性传递给options hash。而不是你应该使用链。 2.在return函数中使用success时,仅从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' );
});