在jQuery中使用getJSON函数时,回调函数不会更改var

时间:2011-10-07 12:45:35

标签: jquery

我正在尝试更改变量以进行验证,更改会在返回某些数据后在$.getJSON()函数内发生。

问题是在链接变量之后,在$.getJSON()之外,变量返回到其原始值。以下是该部分的代码:

var isValid = true; 
// Validate Username
var un = $('#username').val();
if(un.length < 5) {
  isValid = false;
  $('#ins_username').html('').hide();
  $('#msg_username').html('Please fill username, minium 5 Characters').show();
  // to append to another msg
} else {
  $.getJSON("validateUsername.action", {
    'newStudent.users.username': $('#username').val()
    },function(json) {
      if ( json.jsonData.usernameFound == true ) {
        isValid = false;
        $('#ins_username').html('').hide();
        $('#msg_username').html('Please change username, Username Taken.').show();
        alert ("the isValid value inside the getJson() "+isValid);   
        // the isValid = false here as expected
        alert ("JOSN from inside "+json);  
      } else {
        $('#msg_username').html('').hide();
      }
  });
  alert ("the isValid value outside the getJson() "+isValid);   
  // the isValid = true here, i want the changes to remain
}

我不确定我在这里错过了什么。

1 个答案:

答案 0 :(得分:0)

success函数是一个回调函数,这意味着它不会立即执行。最后alert 评估并立即执行。当它执行时,回调没有机会更新isValid的值,因此它仍然显示原始值。

更新:这是应该有助于解释此行为的jQuery documentation on the concept of a callback