jquery ajax然后调用成功

时间:2015-02-19 02:37:55

标签: javascript ajax

因此,对于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之间的差异是什么?

2 个答案:

答案 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状态代码时才会执行它。这就是为什么我们有其他回调:errorcomplete等等。

修改 回答“那么和成功之间的差异是什么?”让我们看看 .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
  }
);