callback()产生语法错误。对象不是一个功能

时间:2014-07-20 15:43:35

标签: javascript callback

    var ajax = function(url,callback) {

    if(window.XMLHttpRequest) {
        xml = new XMLHttpRequest();
    }
    if(window.ActiveXObject) {
        var xml = new ActiveXObject("Microsoft.XMLHTTP");
    }
    this.xml = xml;
    alert(xml);
    xml.onreadystatechange = function(callback) {
    callback = callback();
            if(xml.readyState == 4 && xml.status == 200) {
            alert(xml);

            }       
    }
    xml.open('GET',url,true);
    xml.send(null);

}

ajax('/server/eChck.php?email=email@yahoo.com',function(){
    alert(xml);
});

回调()不起作用。产生语法错误。可以向我解释我将如何编码这样我可以将我的callback()放在参数内吗?

谢谢, Jon W

1 个答案:

答案 0 :(得分:1)

这里有两个错误:

xml.onreadystatechange = function(callback) {
callback = callback();
        if(xml.readyState == 4 && xml.status == 200) {
        alert(xml);

        }       
}

首先,您将创建就绪状态更改处理程序作为一个带参数的函数,该参数不是错误的,但您已将该参数命名为“callback”。这意味着在状态更改处理程序内部,“callback”引用该参数,而不是传递给外部函数的“回调”。

其次,通过将调用回调函数的结果分配给“回调”,每次调用事件处理程序时都会覆盖该值。

我想你想要这样的东西:

xml.onreadystatechange = function() {
        if(xml.readyState == 4 && xml.status == 200) {
          callback();
        }       
}

编辑 - 除了这些更改之外,您还应在“ajax”函数中声明“xml”变量:

var ajax = function(url,callback) {
    var xml;

并取出这一行:

    this.xml = xml; // take this out