无法在$ ajax成功中更改变量的值

时间:2011-11-22 19:45:06

标签: variables jquery

我有一个奇怪的奇怪问题,这是我的JS代码

function ValidateUser(username) {
   var userExists = "somevalue";


   $.ajax({
       contentType: 'application/json, charset=utf-8',
       type: "POST",
       url: "/Controller/Validate",
       data: JSON.stringify({ username: username }),
       cache: false,
       dataType: "json",

       success: function (response) {
           alert(response);

           if (response == true) {
               userExists = true;
               alert("user exists: " + userExists);
           } else {
               alert("user exists: " + userExists);
           }
       },

       error: function (XMLHttpRequest, textStatus, errorThrown) {
           alert('error');
       }

   });

    return userExists;

}
好吧,动作工作正常并正确验证用户,但函数总是返回“somevalue”.....什么给出?我的预感是它与功能范围有关。但是我该如何解决这个问题呢。

2 个答案:

答案 0 :(得分:2)

因为您调用$.ajax的函数在Ajax调用完成之前返回。

简单的答案是在success函数中完成您需要做的工作,可以使用立即函数(如现在),也可以将success设置为现有函数。

您也可以使用jQuery's $.when function

答案 1 :(得分:0)

您也可以使用“asynch:false”设置,它会锁定浏览器,在请求处于活动状态时禁用任何操作。这是您的代码更改:

function ValidateUser(username) {
   var userExists = "somevalue";


   $.ajax({
       contentType: 'application/json, charset=utf-8',
       type: "POST",
       url: "/Controller/Validate",
       asynch: false,
       data: JSON.stringify({ username: username }),
       cache: false,
       dataType: "json",

       success: function (response) {
           alert(response);

           if (response == true) {
               userExists = true;
               alert("user exists: " + userExists);
           } else {
               alert("user exists: " + userExists);
           }
       },

       error: function (XMLHttpRequest, textStatus, errorThrown) {
           alert('error');
       }

   });

    return userExists;

}

您可以在此处获取更多信息:jQuery.ajax()