这是我的代码。我想得到“旗帜”,但“旗帜”总是“假”。即使程序执行“flag = true”,“flag”在返回时也会变为“false”。如何从$ .ajax()获得真正的价值?请帮我。感谢
function checkUserName() {
var name = document.getElementById("userName").value;
var namemsg = document.getElementById("userNameMsg");
var flag=false;
if (name == "") {
flag=false;
} else {
$.ajax({
type : "POST",
url : "/vclub/verify/checkUserName.do",
dataType : "json",
data : "userName=" + name,
success : function(data) {
if (data == true) {
flag=true;
} else {
flag=false;
}
}
});
}
alert(flag);
return flag;
}
答案 0 :(得分:3)
由于AJAX是异步的,因此您需要使用回调。在代码结束时返回标志后,您会收到AJAX响应。关键点是success
之前未调用return flag
,因为仅当从success
收到响应时才会调用附加到url
的匿名函数。请注意,由于您可能会或可能不会运行AJAX请求,因此当您可以立即提供返回时(如果名称为空字符串),您仍需要使用回调函数。在这种情况下,将在flag设置为false后立即执行回调。否则,checkUserName可能会在AJAX返回之前完成。
function checkUserName(callback) {
var name = document.getElementById("userName").value;
var namemsg = document.getElementById("userNameMsg");
var flag=false;
if (name == "") {
// Note a callback is needed even if we don't use AJAX (because we might)
flag=false;
callback(flag);
} else {
$.ajax({
type : "POST",
url : "/vclub/verify/checkUserName.do",
dataType : "json",
data : "userName=" + name,
success : function(data) {
if (data == true) {
flag=true;
} else {
flag=false;
}
callback(flag);
}
});
}
}
使用方法:
checkUserName(function (flag) {
// Here, the flag variable is available, but will not run until "callback" is called above
alert(flag);
});
答案 1 :(得分:0)
当AJAX请求成功完成时,flag
的值将会更改,因为您为success
函数的$.ajax
属性分配的函数是回调函数。
实际上,您的alert(flag);
代码行将在执行success
回调之前运行(当flag
的值尚未更改时)。
如果您将alert(flag);
移至success
回调,您会看到它的值已更改。
我认为您还需要将callback();
行移至该功能。
答案 2 :(得分:0)
放async:false
,
function loadProcess(processId) {
var prc;
$.ajax({
async: false,
url: '/processes/getprocess',
data: {
'id': processId
},
success(result) {
prc = result;
},
error(xhr) { alert(xhr.responseText); }
});
return prc;
}