我很好奇如何讓我的AJAX/JQuery使用新的數據庫信息更新頁面。JQuery/Ajax - 使用.replaceWith或.html數據庫調用後在頁面中加載新數據?
研究現有的問題表明,這些職位可能會有所幫助:
jQuery AJAX calls to database work, but not in order
jQuery AJAX using fadeIn + replaceWith
與這些建議一致,我創建了處理與AJAX發送的數據的PHP函數。在成功,我fadeOut舊的HTML,並replaceWith新的HTML。
問題是,在第一次單擊DOM元素時,數據庫中的新數據不會顯示,但它會在第二次點擊時顯示。我也在第二次點擊時收到不需要的頁面刷新。
你可以看到一個活生生的例子(我的婚禮網站): http://bucketlingerwedding.com/80s-music-reception/
如果試投了,它不工作的第一次,和作品第二次(除了頁面重新加載) 。
我的另一個問題是我不知道cache是否應該設置爲'false'或者簡單地省略。部分問題可能是我用replaceWith加載的新HTML(我也試過.html())對每個錶行都有相同的類和ID。我很好奇,如果我試圖替換單個行而不是整個表,並給它一個新的ID和類名,那麼JQUERY/AJAX會在數據庫的新信息中淡入新行嗎?
這裏是我使用的AJAX代碼(部分基於以上職位):
$(document).ready(function(){
//JQuery for the submission of a new list item.
$('input.[class$="-arrow"]').click(function(e){
e.preventDefault(); //put e in function.
var ajaxurl = '<?php echo the_permalink(); ?>';
if ($(this).hasClass('up-arrow')) {
var arrowdirection = 'up';
var entry = $(this).val();
}
else if ($(this).hasClass('down-arrow')) {
var arrowdirection = 'down';
var entry = $(this).val();
}
var rowid = '.line-items-rows' + '#' + entry;
var data = {
action: 'cb_lud_arrow_action',
arrow: arrowdirection,
entryID: entry
};
$.ajax ({
cache: false,
type: 'POST',
url: ajaxurl,
data: data,
success: function(data){
newtable = '<?php
$cb_table_code = plugins_url("list-up-down/table-up-down.php", _FILE_);
include_once "table-up-down.php";
echo $cb_lud_new_output;
?>';
$('#cb_lud_table').fadeOut('fast', function(){
$(this).replaceWith(newtable).hide();
newtable.fadeIn('fast');
});
}
});
});
});
注:我已經證實,貼有AJAX的數據的確更新數據庫表,所以。 PHP文件和ajax POST方法至少可以正常工作。
我基本上需要的是事件的時間順序是:
- 用戶投票最多(點擊)在表中的一行。
- 將數據發送到MySQL數據庫,在正確的列中添加投票。
- 成功後,函數將確定數據庫中的新值並生成新的html。
- 舊數據淡出,新數據淡入。
- 大家都很高興。
它沒有多大關係,我如果這更是一個JQuery的解決方案(如把正確的順序的影響,或使用.delay()函數),以上的AJAX解決方案,其中的我根據數據的成功發佈設置回調函數,或者與緩存相關的東西。只是想讓它工作。請幫忙。
感謝您的回答。我將通過建議的解決方案並接受一個答案。 – ChrisBuck
太棒了!此解決方案在第一次點擊後完美運行。請參閱http://bucketlingerwedding.com/80s-music-reception/。它會在第二次點擊後刷新頁面,我想我可以用on()來彌補,就像你提到的那樣。不完全確定如何做到這一點,但它應該是一個更簡單的問題。感謝您的詳細解答和有效的代碼。 – ChrisBuck
你也會注意到,由於不重複表格的html,頁面的來源大大減少了。 table元素不再被替換,只有內部行,所以你可以委託'on()'到你的點擊處理程序的表格元素,因爲表格現在是一個永久性的資源 – charlietfl