我有一个文本框的onblur事件使用的JavaScript函数。文本框捕获电子邮件地址
function strEmailUnique(strEmail, intClientID) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", 'AJAX_retrieval.php?strEmail=' + strEmail + '&intClientID=' + intClientID, true);
xmlhttp.send();
return xmlhttp.responseText;
}
如果电子邮件存在,AJAX调用将返回包含该电子邮件的人的姓名,否则返回空字符串。
然而,它不起作用。至少,直到我插入这一行
alert('xmlhttp.responseText: ' + xmlhttp.responseText);
返回声明前的。我不知道为什么会这样 - 我需要知道,因为显然我不想在实时代码中发出警报。
当我说“它工作”时,发生时的实际警报表示空响应,但后续行为表明该函数返回了非空值。这也是一个谜。
我已经尝试在返回之前访问响应(我认为是alert()正在做的事情)
var strResponse = xmlhttp.responseText;
return strResponse;
我还认为这可能是一个时间/同步问题,所以我尝试插入这个
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > 3000){
break;
}
}
来自JavaScript sleep/wait before continuing返回之前,但无济于事。
我的onblur事件代码(我认为不相关)是
var strDB_outcome = strEmailUnique(document.getElementById('email').value, -1); if (strDB_outcome != '') alert('The email address ' + document.getElementById('email').value + ' is already registered to ' + strDB_outcome); "
并且AJAX目标执行此操作
echo fetch_datum($conn, "SELECT IFNULL((SELECT REPLACE(CONCAT(LEFT(strForenames, 1), '_', strSurname), ' ', '') FROM $tblClients WHERE LOWER(strEmail) = LOWER('{$_GET['strEmail']}') AND intClientID <> {$_GET['intClientID']} LIMIT 1), '')");
这也是我认为不相关的 - 只要alert()包含在JS函数中,这些东西就能达到我的期望。我可以做什么而不是alert()语句?
以下SO问题似乎都涉及更复杂的情景
JavaScript won't work unless I use alert()!
Javascript ignores part of code unless I put an "alert" before it
Form fields not populated from AJAX unless I include an alert in the code
或非常具体的修复。