为什么在我调用该功能时警报不显示?

时间:2013-06-25 00:20:11

标签: javascript html ajax

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

1 个答案:

答案 0 :(得分:1)

更改为:

setTimeout(newuser, 1000);

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

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

此外,为了实现目标,您需要在newuser()功能结束时拨打createXmlHttpRequestObject()一次。

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

xmlHttp.onreadystatechange = newuser;