2013-02-07 29 views
0

我有一個Wordpress Lists Table,每一行都有要刪除的選項。點擊<a class="delete_gallery" href="&action=delete">我彈出一個jQueryUI對話框。當確認這個動作時,ajax會發生或者其他什麼,並且一些服務器端的東西被處理。成功時,我希望頁面刷新並顯示一條wordpress消息,說明刪除成功。jQuery AJAX頁面刷新顯示更改,然後是消息反饋

我希望頁面刷新的原因是因爲我的WP_List_Table沒有被Ajax化,我需要改變才能看到。

如何在頁面刷新後顯示消息?我目前使用的方式在刷新後立即顯示消息。我不想要任何延遲或任何事情:只要單擊對話框中的確認,我想要刷新頁面,發生服務器端事件,然後顯示成功消息。

這裏是我的一些代碼,爲簡單起見刪除了服務器端的var/info。注意:我使用內置Ajax的Wordpress。

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按鈕。無論哪種方式,刷新後都沒有處理響應。

謝謝,我感謝所有幫助。

+0

你爲什麼不直接用js在ajaxsuccess上從dom中刪除該行? – mikakun

+0

我應該這樣做,但是之後我必須對行進行計數,如果是最後一行,則在刪除其他所有內容時顯示「沒有數據,請添加一些」消息。無論如何,我仍然想知道如何去做我上面描述的,因爲我浪費了很多時間! –

+0

@mikakun在我等待答案時,我實施了您的解決方案。如果從多頁面的頁面中刪除一個圖庫,這可以很好地工作。但是,如果有多個圖庫頁面,則所有行都會被刪除,並且不會顯示圖庫的第二頁。因此,看起來真的沒有! –

回答

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> 
相關問題