Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 显示模块ajax_Javascript_Jquery_Ajax_Oop - Fatal编程技术网

Javascript 显示模块ajax

Javascript 显示模块ajax,javascript,jquery,ajax,oop,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",

我有以下代码:

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(用户名、密码);返回未定义的。
有什么想法吗?

当然,它将返回
未定义的
,返回值是success函数的值。不是
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.当您将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' );
});

@取消定义:他设置了async:false是的,我没有注意到。