0

Wordpress リスト テーブルがあり、各行には削除するオプションがあります。クリックする<a class="delete_gallery" href="&action=delete">と、jQueryUI ダイアログがポップアップします。アクションを確認すると、ajaxが発生したり、サーバー側の処理が行われたりします。成功したら、ページを更新し、削除が成功したことを説明するワードプレス メッセージを表示します。

ページを更新する理由は、WP_List_Table が ajax 化されておらず、変更を確認する必要があるためです。

ページが更新された後にメッセージを表示するにはどうすればよいですか? 私が現在持っている方法では、更新が呼び出された直後にメッセージが表示されます。遅延などは望んでいません。ダイアログの確認がクリックされるとすぐに、ページが更新され、サーバー側の処理が行われ、成功メッセージが表示されます。

簡単にするためにサーバー側の var/info を削除したコードの一部を次に示します。注: 私は Wordpress の組み込み Ajax を使用しています。

jQuery(".delete_gallery").click(function(event) {

    event.preventDefault();     
var link = jQuery(this).attr('href');
var link = link.substring(0, link.indexOf('?'));

jQuery("#deleteconf").dialog({
  height: 150,
  width: 350,
  resizable : false,
  modal: true,
  buttons: {
      "Delete all items": function() {
     jQuery(this).dialog("close");
        jQuery.post(
        MyAjax.ajaxurl,
        {
        action : 'delete_gallery',
        postCommentNonce : MyAjax.postCommentNonce,
        },
    function(response) {
        window.location.reload(link);   
        jQuery('#message p').html('The gallery was deleted successfully');
        jQuery('#message').show();      
    }); return false;

    },
    Cancel: function() {
    jQuery(this).dialog("close"); return false;
    }
}
}); 

});

これが最善の方法ですか?その場合、更新後にメッセージを表示するにはどうすればよいですか。そうでない場合、最善の方法は何ですか?私は本当にjQueryUIを使いたいのですが、ページを更新して変更を表示するために、誰かが「オーケー、アイテムは削除されました」のようにクリックする必要はありません。

私はこれに似たものを用意していますが、フォームと php を使用して $_POST を送信するボタンをキャプチャしています。jQueryUI ボタン​​を使用するときにそれが可能かどうかはわかりません。いずれにせよ、リフレッシュ後の応答には取り組みません。

ありがとう、そして私はすべての助けに感謝します.

4

1 に答える 1

0

ほぼ7か月後、偶然にこれを解決しました。

AJAX 応答が成功したら、更新を呼び出す代わりに、非表示の値を持つフォームを送信して、表示したいメッセージを表示する必要があります。メッセージを条件付きにしたい場合は、フォームを送信する前にメッセージを入力するだけで済みます。

htmlフォーム

<form action="" method="post" id="new-message-form">
    <input type="hidden" name="message" value="Success Message" />
</form>

ajax レスポンス、成功時

function(response) {      
    $('#new-message-form').submit();    
});

追加の jquery - このコードはすべての $_POST を取得し、必要なものが存在するかどうかを確認します。

<script>
jQuery(document).ready(function($) {
    // grab all $_POST
    var post = <?php echo json_encode($_POST); ?>;

    // if $_POST is set
    if('message' in post) {
        $('.success').html(post['message']); // display contents in .success
    }
});
</script>
于 2013-09-04T04:07:15.217 に答える