Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何在ajax查询前后强制DOM更新/刷新?_Jquery_Ajax_Dom_Asynchronous_Refresh - Fatal编程技术网

Jquery 如何在ajax查询前后强制DOM更新/刷新?

Jquery 如何在ajax查询前后强制DOM更新/刷新?,jquery,ajax,dom,asynchronous,refresh,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

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

$("#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...
$("#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...
        }
});
$.ajax({
  url: 'book_ajax.php?req=daysformonth&month=1',
  success: function(data) {

    $("#busysymbol").hide();

  }
});
这段代码在Firefox中运行完美,但在Chrome和Safari中,busy符号没有显示出来。我相信Chrome和Safari正在缓存对DOM和$(“busysymbol”).show()调用的更改,不会立即刷新

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

也许可以尝试使用和全局事件作为忙符号。 例如:

$("#busysymbol").ajaxStart(function(){
    $(this).show();
});
$("#busysymbol").ajaxStop(function(){
    $(this).hide();
});
在代码的开头,删除特定的.ajax()处理程序中的隐藏和显示

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

$("#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...
$("#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...
        }
});
$.ajax({
  url: 'book_ajax.php?req=daysformonth&month=1',
  success: function(data) {

    $("#busysymbol").hide();

  }
});
(未测试)


如果在不重新定位#busysymbol的情况下工作,请尝试,然后尝试在一开始添加正确的定位。请记住,
.position()
不接受参数,因此代码中最长的一行实际上没有做任何事情–请参阅。您需要的是
.offset()
.css()

我认为Chrome和Safari正在同步执行您的Ajax请求,尽管有
aynch
标志。为了避免这种情况,可以将图标隐藏在ajax函数的回调中,如下所示:

$("#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...
$("#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...
        }
});
$.ajax({
  url: 'book_ajax.php?req=daysformonth&month=1',
  success: function(data) {

    $("#busysymbol").hide();

  }
});

$(“#busysymbol”).hide()之前
do
alert('Hello')
并查看发生了什么添加alert('Hello')确实会强制显示$(“#busysymbol”)。这很好,因为它证明了程序流程是正确的,但是,如果没有警报,DOM更新不会发生,忙符号保持隐藏。嗨,rsp,谢谢你的建议。这似乎是同步请求的一个问题。我将ajaxStart()和ajaxStop()添加到$(“#busysymbol”)中,它对页面上的所有其他异步查询都非常有效,但对同步查询却不起作用(不管怎样,使用Safari和Chrome,Firefox似乎还可以)。我想不出一种方法来绕过同步查询。ajax用于返回值的函数,需要ajax来完成,这样函数才能返回。您提到了这一点,这很有趣。position()不带任何参数。
我在查找函数时转到了
这些文档说有几个参数,我已经看到这个函数在所有浏览器中都能运行的证据。@user631798:position()的那些参数是一个在普通浏览器中不起作用的扩展。您没有提到您正在使用jQueryUI,但如果您提到了,那么您可以使用它。只要确保页面中包含jqueryui,它就可以正常工作。我仍然建议您在不重新定位#busysymbol的情况下尝试一下,如果它可以工作,那么请尝试在一开始添加正确的定位。@user631798:同步XHR请求会导致很多问题,其中之一就是您遇到的问题,另一个问题是,您在请求时阻止了页面的整个用户界面,这在开发过程中可能不是您的问题,但您的用户会在生产过程中注意到,并认为他们的浏览器已挂起或您的网站已损坏。您不必在等待响应时阻塞,这就是回调的目的。在回调中使用可用的数据。试着使用与我提供的示例类似的东西。注意:这个家伙有“async:false”,这是在告诉它同步执行。所以他们这样做是因为异步标志,而不是不顾它。