ajaxクエリの直前と直後にDOMを強制的に更新/更新するにはどうすればよいですか?

ajax asynchronous dom jquery refresh
ajaxクエリの直前と直後にDOMを強制的に更新/更新するにはどうすればよいですか?

Busyアイコンにブラウザの問題があります。 コードは次のようになります。

$("#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でディスプレイを強制的に更新する方法はありますか。

  6  0


ベストアンサー

忙しいシンボルに対してhttp://api.jquery.com/ajaxStart[ajaxStart]およびhttp://api.jquery.com/ajaxStop[ajaxStop]グローバルイベントを使用してみてください。 例えば:

$("#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()`は引数を受け取らないため、コードの最長行が実際には何もしていません。http://api.jquery.com/position [the docs]を参照してください。 必要なのは `.offset()`または `.css()`です。

7


「aynch」フラグにもかかわらず、ChromeとSafariはAjaxリクエストを同期的に実行していると思います。 これを回避するには、次のようなajax関数のコールバックでアイコンを非表示にすることができます。

$.ajax({
  url: 'book_ajax.php?req=daysformonth&month=1',
  success: function(data) {

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

  }
});

0


タイトルとURLをコピーしました