有人可以帮我理解为什么这个警报不会出现?在函数newuser()
中,应该显示一个警报,带有一些文本,但是当我调用它时没有任何反应。我该如何解决这个问题?
var xmlHttp = createXmlHttpRequestObject();
function createXmlHttpRequestObject() {
var xmlHttp;
if (window.ActiveXObject) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlHttp = false;
}
} else {
try {
xmlHttp = new XMLHttpRequest();
} catch (e) {
xmlHttp = false;
}
}
if (!xmlHttp) {
alert("cant create that object hos");
}
function newuser() {
if (xmlHttp.readyState === 0 || xmlHttp.readyState === 4) {
name = encodeURIComponent(document.getElementById("name").value);
company = encodeURIComponent(document.getElementById("company").value);
nationalities = encodeURIComponent(document.getElementById("nationality").value);
phonenumber = encodeURIComponent(document.getElementById("phonenumber").value);
alert(name, company, nationalities, phonenumber);
} else {
setTimeout('newuser()', 1000);
}
}
}
答案 0 :(得分:1)
更改为:
setTimeout(newuser, 1000);
注意:没有引号,函数名后面没有()
。
当您向setTimeout()
提供字符串时,将在全局范围内计算表达式。但是您的函数是createXmlHttpRequestObject()
函数的本地函数,因此它在全局范围内不可用。您需要按名称引用它,而不是作为要评估的字符串。
此外,为了实现目标,您需要在newuser()
功能结束时拨打createXmlHttpRequestObject()
一次。
但是,使用超时是一种奇怪的方法。通常的方法是:
xmlHttp.onreadystatechange = newuser;