因此,对于JQuery Ajax调用,我们可以执行类似下面的操作
function checkUserName() {
var flag=false;
$.ajax({
type : "get",
url : "/vclub/verify/checkUserName.do",
data : {lastName: "jason"},
success : function(data) {
if (data) {
alert("flag now true");
flag=true;
}
}
});
alert(flag);
return flag;
}
旗帜永远不会成真。
我搜索了论坛并被告知要使用回调函数。
为什么我不能使用成功函数(我相信成功函数在成功后调用ajax响应?)来赋值标志变量?
“THEN()”和“成功函数”有什么区别?
对我来说,他们两个似乎差不多。
我错过了什么?
谢谢。再次感谢您分享您的知识。
但是Then和Success之间的差异是什么?
答案 0 :(得分:1)
您在AJAX通话中的flag=true
回调中设置success
。要解决此问题,只需在success
回调中移动您计划完成的操作,或者为其添加新的操作:
function checkUserName(callback) {
$.ajax({
type : "get",
url : "/vclub/verify/checkUserName.do",
data : {lastName: "jason"},
success : callback
});
}
checkUserName(function(data) {
console.log(data);
alert("Done!");
});
答案 1 :(得分:0)
您的代码中的问题是:
$.ajax 描述:执行异步 HTTP(Ajax)请求
因此,代码由浏览器读取,然后执行。在您执行alert(flag)
时,flag
未分配。在http请求完成后,调用success
回调但是在第二次$.ajax()
调用后它没有执行代码。
这就是为什么你必须在$.ajax()
回调中放置你需要执行的代码或调用你需要在其中调用的函数
要修复代码,请在alert()
回调
success
function checkUserName() {
var flag=false;
$.ajax({
type : "get",
url : "/vclub/verify/checkUserName.do",
data : {lastName: "jason"},
success : function(data) {
if (data) {
alert("flag now true");
flag=true;
alert(flag);
}
}
});
return flag;
}
一个重要的事情是success
中的代码可能永远不会被执行,只有当请求返回200状态代码时才会执行它。这就是为什么我们有其他回调:error
,complete
等等。
修改强> 回答“那么和成功之间的差异是什么?”让我们看看 .then 描述:
deferred.then()描述:添加要在Deferred对象被解析,拒绝或仍在进行中时调用的处理程序
所以主要区别在于success
回调仅在http请求完成并且收到200状态代码时被调用,但then
函数< / em> 在此上下文中用于向jqXHR
对象添加回调处理程序,例如
$.get( "test.php" ).then(
function() {
//ajax complete equivalent callback here
}, function() {
//ajax error equivalent callback here
}
);