AJAX/JQuery でページを新しいデータベース情報で更新する方法に興味があります。
既存の質問に対する調査では、次の投稿が役立つ可能性があることが示唆されています。
データベースへのjQuery AJAX呼び出しは機能しますが、順序どおりではありません
fadeIn + replaceWithを使用したjQuery AJAX
これらの提案に従って、AJAX で送信されたデータを処理する PHP 関数を作成しました。成功したら、古い HTML をフェードアウトし、新しい HTML に置き換えます。
問題は、DOM 要素が最初にクリックされたときにデータベースからの新しいデータが表示されず、2 回目にクリックされたときに表示されることです。また、2 回目のクリックで不要なページの更新が行われます。
http://bucketlingerwedding.com/80s-music-reception/で (私の結婚式の Web サイトの) 実際の例を見ることができます。
投票しようとしても、最初は機能せず、2 回目は機能します (ページのリロードを除く)。
私が抱えているもう 1 つの懸念は、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 ソリューションに近いものであるかは、私にとっては大した問題ではありません。データの投稿の成功、またはキャッシュに関係する何か。動作させたいだけです。助けてください。