Firefox似乎在更新DOM之前等待异步ajax完成

时间:2017-06-15 00:39:02

标签: javascript jquery ajax firefox dom

我编写了以下函数来从日志文件中获取文本,并在新的浏览器窗口中将其显示为纯文本:

function openLog(logFile) {
    var win = window.open('', '_blank');
    var doc = win.document;
    var title = doc.createElement('TITLE');
    var titleText = doc.createTextNode(logFile);
    title.appendChild(titleText);
    doc.head.appendChild(title);
    doc.body.style.cursor='wait';

    $.ajax({
        type: 'GET',
        url: '/getLog',
        data: { logFile : logFile },
        success: function(log) {                
            var pre = doc.createElement('PRE');
            var preText = doc.createTextNode(log);
            pre.appendChild(preText);
            doc.body.appendChild(pre);
            doc.body.style.cursor='default';
        },
        error: function() {
            doc.body.style.cursor='default';
        }
    });
};

'wait'游标对大型日志文件很有用。

在Chrome / IE中,当异步ajax请求在后台运行时,会立即显示“wait”光标。在Firefox中,只显示“默认”光标,因为它似乎在等待ajax函数首先完成(一旦它完成,它会立即设置为'default')。

Firefox中有解决方法吗?任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

我很惊讶它适用于任何浏览器 - 一个新打开的窗口会有一个零内容的主体因此零大小 - 你如何"悬停"什么都没有让当前光标更改为指定的光标?我认为Firefox是唯一行为正常的浏览器!!

那就是说 - 虚拟代码

print *this

我将其发布为可执行代码段,但是谁想允许SO为此打开弹出窗口:p

我使用function openLog(logFile) { var win = window.open('', '_blank'); var doc = win.document; var title = doc.createElement('TITLE'); var titleText = doc.createTextNode(logFile); title.appendChild(titleText); doc.head.appendChild(title); // change from here var html = doc.documentElement; html.style.cursor = 'wait'; html.style.minHeight = '100vh'; // changes finished // // dummy setTimeout for testing setTimeout(function () { // remove the cursor from HTML element html.style.cursor = 'default'; }, 4000); }; openLog('banana'); (即HTML元素) - 因为为body.parentElement执行此操作会以垂直滚动条结束