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

时间:2014-11-21 13:19:31

标签: 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 && 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调用一样。我的代码有什么问题?我怎么打印页面?

1 个答案:

答案 0 :(得分:2)

我猜这段代码在全球范围内。

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

只需将您的功能名称更改为其他名称。


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