-1

谁能帮我理解为什么这个警报不会出现?在函数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);
        }
    }
}
4

1 回答 1

1

改成:

setTimeout(newuser, 1000);

注意:没有引号,()函数名后面也没有。

当您给 一个字符串时setTimeout(),表达式将在全局范围内进行评估。但是您的函数是函数的本地createXmlHttpRequestObject()函数,因此它在全局范围内不可用。您需要按名称引用它,而不是作为要评估的字符串。

此外,为了让事情顺利进行,您需要在函数newuser()结束时调用一次。createXmlHttpRequestObject()

不过,使用超时是一种奇怪的方法。通常的方法是:

xmlHttp.onreadystatechange = newuser;
于 2013-06-25T01:02:28.223 回答