【问题标题】:Javascript AJAX Call Scope - Probably sillyJavascript AJAX 调用范围 - 可能很傻
【发布时间】:2017-01-25 00:23:38
【问题描述】:

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

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

当我使用 duplicationCheck.done() 并解析数据时,我的 if 语句会正确响应(即,如果用户输入了重复项,则会对其进行检查。这里的问题是:尽管下面的 if 语句正常运行,但当 isDuplicate设置为true,当在done()函数下方调用console.log命令时,它显示为未定义。我不知道为什么。通过我的研究,我认为这是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);

....

【问题讨论】:

标签: javascript php ajax scope


【解决方案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

....

【讨论】:

  • 谢谢!为了实现我想要的功能,我不得不将其更改为同步调用(我知道,有点傻,但我通常使用传统调用)。您的代码真的很有帮助,不胜感激!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-11
相关资源
最近更新 更多