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是的,我没有注意到。