如果 ajax 响应包含 window.print,则它会循环

ajax response goes on loop if it includes window.print

本文关键字:循环 print ajax 响应 包含 window 如果      更新时间:2023-09-26

我想在收到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();
      }

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

我猜代码在全局范围内。

所有全局变量(全局函数,全局

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

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


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