1

次のようなボタンクリックでトリガーされるAjax関数があります。

$.ajax({
            type: "POST",
            dataType: 'json',
            url: "DBDeleteList.php",
            data: {listID: listID},
            success: refreshMenus($(this))
});  

PHP ファイルが正常に実行され、データベースが更新されます。

refreshMenus() が呼び出され、.load() を呼び出して更新されたデータベースを反映するようにメニューを更新しますが、ロード関数はすぐに (データベースの更新が登録される前に) コンテンツをロードするようです。

基本的に何が起こるかというと、Jquery .load を介してページからコンテンツをロードすると、更新されません。ページを手動で更新すると (たとえば f5)、データベースが更新され、メニューが正しく表示されます。

これが refreshMenus() です。

 function refreshMenus( list ) {
    list.parents('li').remove();
    $('#sortableLoader').load(window.location.href + ' #sortableMenu');
 }

Div ID sortableMenu が更新されています。更新が早す​​ぎると思います。

4

4 に答える 4

2

あなたrefreshMenus($(this));はajaxの完了直前に呼び出され$(this)、ajax関数の外側の変数に保持されます。だからこれを試してください

var el = $(this);
$.ajax({
    type: "POST",
    dataType: 'json',
    url: "DBDeleteList.php",
    data: { listID: listID }
    success: function(){ 
        refreshMenus(el);
    }
});
于 2012-07-25T22:32:07.460 に答える
0

私はあなたが使うべきだと思います

success:function(){ refreshMenus($(this)); }

私が正しければ、実際に起こっているのは$ .ajaxがその結果refreshMenus($(this))コールバック関数として受け取っていることです(コンソールを見るとエラーがスローされることさえあります)。これは、AJAXが開始する前にrefreshMenus($(this))実際に呼び出されることを意味します。また、jQueryを使用するか、前述の他の回答のいくつかと同じように実行して、を変数化することをお勧めします。context$(this)

于 2012-07-25T22:31:16.303 に答える
0

成功(完了)の代わりに完全なハンドラー(常に)を使用し、必要に応じてタイムアウトを追加しますが、コールバックが呼び出されるまでにサーバー側が終了する必要があるため、タイムアウトを追加しないでください。

var elem = $(this);
$.ajax({
       type: "POST",
       dataType: 'json',
       url: "DBDeleteList.php",
       data: { listID: listID }    
  }).always(function() {
       setTimeout(function() {
          refreshMenus(elem); //`this` will be out of scope
       }, 300); //or whatever you need    
});​
于 2012-07-25T22:31:34.227 に答える
0

refreshMenus($(this))を to に変更してみてくださいrefreshMenus($('#listid'))(もちろん、更新したいリストに正しいアクセサを使用してください:)

あなたが抱えている問題は、$(this)あなたが渡している要素refreshMenusが更新したいリスト要素(またはトリガーボタン)ではなく、それがxhr(ajax)オブジェクトであるため、refreshMenusメソッドがそうではないことです更新する必要がある要素を取得します。

また、カブルーが言ったことは良いアドバイスです -

success:function(){ refreshMenus($('#listid')); }
于 2012-07-25T22:33:37.430 に答える