Javascript 如果ajax响应包含window.print,它将循环运行

Javascript 如果ajax响应包含window.print,它将循环运行,javascript,ajax,printing,xmlhttprequest,Javascript,Ajax,Printing,Xmlhttprequest,我希望在收到ajax响应时打印屏幕。这是我的代码: function print() { var request = new XMLHttpRequest(); request .open("GET", "printPage.html", true); var counter = 0; request.onload = function() { if (request.status >= 200 &

我希望在收到ajax响应时打印屏幕。这是我的代码:

function print() {
        var request  = new XMLHttpRequest();
        request .open("GET", "printPage.html", true);
        var counter = 0;

        request.onload = function() {
            if (request.status >= 200 && request.status < 400){
                console.log("success");

                window.print();

            } else {
                // We reached our target server, but it returned an error

            }
        };

        request.onerror = function() {
          // There was a connection error of some sort
        };

        request.send();

      }
函数打印(){
var request=new XMLHttpRequest();
打开(“GET”,“printPage.html”,true);
var计数器=0;
request.onload=函数(){
如果(request.status>=200&&request.status<400){
控制台日志(“成功”);
window.print();
}否则{
//我们到达了目标服务器,但它返回了一个错误
}
};
request.onerror=函数(){
//出现了某种连接错误
};
request.send();
}

但是我在响应上得到一个无限循环(我在控制台上多次看到“success”),这就像windows.print()再次调用相同的ajax调用一样。我的代码有什么问题?如何打印页面?

我猜代码在全局范围内

所有全局变量(全局函数、全局变量)实际上都是全局对象的属性,我们在浏览器上称之为
window
。因此,通过使用名称
print
定义函数,您已经覆盖了通常的
窗口。print
函数。因此,在函数中调用
window.print
,就是调用函数,而不是通常的
window.print

只需将函数的名称更改为其他名称



(*“在浏览器上我们称之为
window
”,从技术上讲,
window
是一个全局变量,因此它是全局对象上的一个属性,在浏览器上,它用来引用自身。)

就是这样,谢谢