Ajax 回调函数在被调用时不会运行

Ajax 回调函数在被调用时不会运行,ajax,callback,Ajax,Callback,它抛出的错误是: 未捕获类型错误:回调不是functionxml.onreadystatechange@ global.js:30 有什么想法吗 我通过onreadystatechange函数传递数据变量并在回调函数中调用它来修复它 ajax : function(typ,url,callback) { if(window.XMLHttpRequest) { var xml = new XMLHttpRequest();

它抛出的错误是:


未捕获类型错误:回调不是functionxml.onreadystatechange@ global.js:30

有什么想法吗

我通过onreadystatechange函数传递数据变量并在回调函数中调用它来修复它

ajax : function(typ,url,callback) {

            if(window.XMLHttpRequest) {
                var xml = new XMLHttpRequest();
            }

            if(window.ActiveXObject) {
                var xml = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xml.onreadystatechange = function(callback) {

            if(xml.readyState == 4 && xml.status == 200) {
                    callback();
            }
        }
            xml.open(typ,url,true);
            xml.send();
    }

  }

 //Function being called
window.onload = function() {    
    JS.ajax("GET","/server/chkEmail.php?email=email@email.com",function()                       { 
        alert(xml.responseText);
    });
}
试着这样做:

ajax : function(typ,url,callback) {

            if(window.XMLHttpRequest) {
                var xml = new XMLHttpRequest();
            }

            if(window.ActiveXObject) {
                var xml = new ActiveXObject("Microsoft.XMLHTTP");
            }

            xml.onreadystatechange = function(data) {

            if(xml.readyState == 4 && xml.status == 200) {
                    var data = xml.responseText;
                    callback(data);
            }
        };
            xml.open(typ,url,true);
            xml.send();
    }

}

window.onload = function() {    
    JS.ajax("GET","/server/chkEmail.php?  email=jonwcode@gmail.com",function(data){
        alert(data);
    });
}
请注意,该函数不接受任何参数,而在代码中,您传递了一个名为
callback
的参数,该参数将覆盖外部范围中的
callback
变量


更新:

看起来您对
xml
变量的作用域设置不当,并且它在AJAX回调中不可用。我强烈建议您阅读更多关于javascript变量作用域的内容。以下是如何使
xml
变量可见:

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

浏览器的调试控制台怎么说?UncaughtTypeError:回调不起作用任何人有任何反馈?抛出另一个错误。未捕获引用错误:没有为调用回调函数的另一个页面定义xml。出现此错误的原因是您错误地限定了
xml
变量的范围。请参阅我的更新答案,以获取有关如何解决此问题的示例。
var xml = null;
if (window.XMLHttpRequest) {
    xml = new XMLHttpRequest();
} else if (window.ActiveXObject) {
    xml = new ActiveXObject("Microsoft.XMLHTTP");
}

if (xml == null) {
    alert('Sorry, your browser doesn\'t seem to support AJAX - please upgrade to a modern browser');
} else {
    xml.onreadystatechange = function() {
        if(xml.readyState == 4 && xml.status == 200) {
            var data = xml.responseText;
            callback(data);
        }
    };

    xml.open(typ,url,true);
    xml.send();
}