jquery - 如何强制 DOM 在 ajax 查询之前和之后更新/刷新?

标签 jquery ajax dom asynchronous refresh

我的浏览器“忙碌”图标出现问题。代码如下所示:

$("#busysymbol").show();
$("#busysymbol").position({my:"right top",at:"right top",of:$("#datepicker"),offset:"-3 3"});
var resp = $.ajax({url: "book_ajax.php?req=daysformonth&month=1",
        cache: false,
        async: false
        }).responseText;
$("#busysymbol").hide();
var daysInMonth = resp.split(",");
...etc...

此代码在 Firefox 中完美运行,但在 Chrome 和 Safari 中,忙碌符号未显示。我相信 Chrome 和 Safari 正在缓存对 DOM 的更改,并且 $("busysymbol").show() 调用不会立即刷新。

有没有办法强制 Chrome/Safari 更新显示。

最佳答案

也许尝试使用ajaxStartajaxStop您忙碌的象征的全局事件。 例如:

$("#busysymbol").ajaxStart(function(){
    $(this).show();
});
$("#busysymbol").ajaxStop(function(){
    $(this).hide();
});

在代码的开头,并从特定的 .ajax() 处理程序中删除隐藏和显示。

哦,我刚刚注意到您正在使用同步请求,所以它甚至不是 AJAX – 更像是 SJAX。在等待请求完成或超时时,您是否有充分的理由完全阻止浏览器的用户界面?如果没有,请尝试使用这样的东西:

$("#busysymbol").hide();
$("#busysymbol").ajaxStart(function(){
    $(this).show();
});
$("#busysymbol").ajaxStop(function(){
    $(this).hide();
});
var resp = $.ajax({url: "book_ajax.php?req=daysformonth&month=1",
        cache: false,
        success: function (resp) {
            var daysInMonth = resp.split(",");
            ...etc...
        }
});

(未测试)

尝试在不重新定位 #busysymbol 的情况下它是否有效,然后尝试在开始时添加正确的定位。请记住,.position() 不接受参数,因此代码中最长的行实际上没有执行任何操作 - 请参阅 the docs 。您需要的是 .offset().css()

关于jquery - 如何强制 DOM 在 ajax 查询之前和之后更新/刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5177037/

相关文章:

dom - 如何使用 Svelte 框架操作 DOM

javascript - 从文档中删除一个 dom 元素,但将其保存为变量?

javascript - 如何制作动画标题以显示在手机和平​​板电脑上?

javascript - 寻求更快的$。 (':data(key)')

javascript - 如何存储对象数组,这些对象是 ajax 查询从 JavaScript 中的 JSON 中提取数据的结果?

javascript - ajax和javascript渗透

javascript - 如何排除具有某些属性的元素?

javascript - 如何在不刷新页面的情况下在 HTML 网页中使用 javascript 编写内容?

javascript - 如果我返回表,检查 Ajax 调用是否为 200 OK 的最佳方法是什么?

php - 获取最后一个元素的 x 个数