Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么调用该函数时不显示警报?_Javascript_Html_Ajax - Fatal编程技术网

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:绝对不是,设置超时在全局范围内。