涉及XMLHttpRequest的JavaScript函数失败,除非我包含alert()语句

时间:2017-07-13 17:47:27

标签: javascript xmlhttprequest alert

我有一个文本框的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

或非常具体的修复。

0 个答案:

没有答案