[英]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.