Javascript AJAX调用范围 - 可能很傻

时间:2017-01-25 00:23:39

标签: javascript php ajax scope

我遇到的问题可能是一个简单的错误。

正如您将在下面看到的,我检查了引用外部PHP检查数据库的重复功能。 PHP正在工作,并返回数据。

当我使用duplicationCheck.done()并解析数据时,我的if语句会正确响应(即,如果用户输入了重复内容,则会检查该问题。这是问题:尽管我的if语句在下面运行正确地,当isDuplicate设置为true时,在done()函数下面调用console.log命令时它显示为undefined。我无法弄清楚原因。我的研究,我认为这是一个问题AJAX调用的异步性质?

感谢您的时间。有什么想法吗?

$("#username_submit").click(function() {

  function checkForDuplication(username) {
    return $.ajax({
      url: 'static/experiments/computerized_handwriting/random_assignment.php',
      type: 'POST',
      data: {userName: username}
    });
  }

var duplicationCheck = checkForDuplication($('input:text').val());


  var isDuplicate;
  duplicationCheck.done(function(data){
        var response = JSON.parse(data);
        if(response.data['json_array'] == "duplicate"){
          isDuplicate = true;
          alert("dup");
        } else {
         isDuplicate = false;
        }
    });

  console.log(isDuplicate);

....

1 个答案:

答案 0 :(得分:1)

这是由于ajax的异步性质。

一旦从done函数中的服务器返回,您需要检查是否有重复。 但是你的duplicationCheck变量不是对函数的引用,而是它返回的内容。

正确的方法是这样的:

$("#username_submit").click(function() {
  $.ajax({
    url: 'static/experiments/computerized_handwriting/random_assignment.php',
    type: 'POST',
    data: { userName: $('input:text').val()}
  }).done(function() {
    var response = JSON.parse(data);
    if (response.data['json_array'] == "duplicate") {
      isDuplicate = true;
      alert("dup");
    }
    else {
     isDuplicate = false;
    }
    console.log(isDuplicate);
  });//done
});//submit click

....