Javascript 为什么调用该函数时不显示警报?
有人能帮我理解为什么这个警报不会出现吗?在函数Javascript 为什么调用该函数时不显示警报?,javascript,html,ajax,Javascript,Html,Ajax,有人能帮我理解为什么这个警报不会出现吗?在函数newuser()中,应该会显示一个带有一些文本的警报,但调用它时什么也没有发生。我怎样才能解决这个问题 var xmlHttp = createXmlHttpRequestObject(); function createXmlHttpRequestObject() { var xmlHttp; if (window.ActiveXObject) { try { xmlHttp = new
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);
}
}
}
改为:
setTimeout(newuser, 1000);
注意:函数名后面没有引号,也没有()
当您给setTimeout()
一个字符串时,表达式将在全局范围内求值。但是您的函数是createXmlHttpRequestObject()
函数的本地函数,因此它在全局范围内不可用。您需要按名称引用它,而不是作为要计算的字符串
另外,为了使事情顺利进行,您需要在createXmlHttpRequestObject()
函数的末尾调用newuser()
一次
不过,使用超时是一种奇怪的方法。通常的方法是:
xmlHttp.onreadystatechange = newuser;
因为有一个错误。。查看您的控制台以了解更多信息!!首先,函数
newuser()
位于函数createXmlHttpRequestObject()
内。可以吗?你用什么浏览器测试?对于所有现代浏览器,点击F12应该可以看到错误控制台。(还有,你需要支持哪些浏览器版本?如果你可以避免支持IE6,那么你可以删除整个愚蠢的ActiveX位)@Dorian\u gd:绝对不是,设置超时在全局范围内。