2011-11-22 62 views
1

我有一个奇怪的奇怪的问题中一个变量的值,这里是我的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

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

简单的答案是在success函数中执行您需要执行的工作,可以使用立即函数(如现在),也可以将success设置为现有函数。你可以使用jQuery's $.when function

+0

好,谢谢。 – sarsnake

+0

@sarsnake创建函数。用它作为'成功'的价值。忍者编辑。 –

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()