最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript window.open infinite loading - Stack Overflow

programmeradmin6浏览0评论

I have a JQuery ajax request that can return error status and messages.

To handle them I use this code :

$.ajax("url", {
    options: options
}).done(function(text, statusText, data) {
    //Manage data
}).fail(function(data) {
    //Manage fail
});

In the fail handle I want, in case of 500: internal server error, to open a new tab with the response text (for debug purposes)

I do it this way :

if (data.status === 500) {
    var w = window.open("App error", "blank");
    w.document.write(data.responseText);
}

And it works !
Except one point : my browser loads the page, the content is displayed (and as it's static content all of this is not a real problem), but the tab is marked as loading... Loading... Loading...

I'm using Firefox 63.0(64bits).

Does anyone know where this comes from ? It's not really annoying, it's just a (fun ?) behavior I don't understand.

Here is a fiddle on which I get the exact same behavior.

I have a JQuery ajax request that can return error status and messages.

To handle them I use this code :

$.ajax("url", {
    options: options
}).done(function(text, statusText, data) {
    //Manage data
}).fail(function(data) {
    //Manage fail
});

In the fail handle I want, in case of 500: internal server error, to open a new tab with the response text (for debug purposes)

I do it this way :

if (data.status === 500) {
    var w = window.open("App error", "blank");
    w.document.write(data.responseText);
}

And it works !
Except one point : my browser loads the page, the content is displayed (and as it's static content all of this is not a real problem), but the tab is marked as loading... Loading... Loading...

I'm using Firefox 63.0(64bits).

Does anyone know where this comes from ? It's not really annoying, it's just a (fun ?) behavior I don't understand.

Here is a fiddle on which I get the exact same behavior.

Share Improve this question asked Oct 31, 2018 at 10:26 Jean-Marc ZimmerJean-Marc Zimmer 5556 silver badges20 bronze badges 2
  • Wouldn't it be much easier, for debugging purposes, to check the response in the browser's console instead? – JJJ Commented Oct 31, 2018 at 10:28
  • @JJJ The debug message is handled by Twig and Slim, so it can be huge, and contains HTML. I can also display the error in the current page. I'm just curious about this infinite loading here. – Jean-Marc Zimmer Commented Oct 31, 2018 at 10:31
Add a comment  | 

2 Answers 2

Reset to default 22

It has to do with the w.document.write line. If you close the document, the loader will finish. Change the code to:

if (data.status === 500) {
    var w = window.open("App error", "blank");
    w.document.write(data.responseText);
    w.document.close();
}

Source: Open about:blank window in firefox

The problem is that you are opening a tab without an url, and most browsers expect an url, that's what I do in order to get rid of it:

      const newWindow = window.open('#');
      if (newWindow) {
        newWindow.addEventListener('load', () => {
          newWindow.document.open();
          newWindow.document.write(request.responseText);
          newWindow.document.close();
          newWindow.stop();
        }, true);

You can replace # with any url path that doesn't exist, the important thing is that once it's loaded, you'll be able to override the content.

It's not the best solution but at least it makes the trick

发布评论

评论列表(0)

  1. 暂无评论