我有这段代码:
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。 任何想法?
答案 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' );
});