簡體   English   中英

Javascript AJAX 調用范圍 - 可能很傻

[英]Javascript AJAX Call Scope - Probably silly

我遇到了一個可能是簡單錯誤的問題。

正如您將在下面注意到的,我檢查了引用外部 PHP 檢查數據庫的重復函數。 PHP 正在運行,並返回數據。

當我使用 duplicationCheck.done() 並解析數據時,我的 if 語句會正確響應(即,如果用戶輸入了重復項,則會進行檢查。問題是:盡管下面的 if 語句運行正常,但何時將 isDuplicate 設置為是的,當在 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);

....

這是由於 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

....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM