メッセージを取り出し、PHP/MySQL で表示します。
ここで、10 個のリストのみを表示したいと思います。
そして、ボタンを追加したい。このボタンをクリックすると、スムーズに下にスライドし、さらに 10 件、合計 20 件のメッセージが表示されます。
ボタンをもう一度クリックすると、下にスライドして合計 30 件のメッセージが表示されます。
誰かjqueryでそれを行う方法を教えてもらえますか?
前もって感謝します。
私の最新のプロジェクトでは、スクロール可能なjQueryツールを使用して、リストに最新の20個のアイテムを表示しています(<ul><li>
)。リストが最後のページにスクロールしたら、次の20個のアイテムをフェッチし、ビルドインjqueryツールAPIを使用してリストの最後に追加します。これは、AJAXリクエストが空の結果を返すまで続きます。これは、データベースにこれ以上リストがないことを示します。フラグとして変数を持っているので、それをfalseに設定したので、リストが最後のページにスクロールしたときにAJAXリクエストは発生しませんでした。
Twitterのホームページのように見えるかもしれませんが、リストが自動的に追加されるため、「more」リンクがありません。
残念ながら、現在プロジェクトはまだアルファ版であるため、ここでは表示できません。あなたはそれを試して、ここにあなたのコードを投稿することができます、そして私はあなたがそれを微調整するのを手伝います。
原則として、新しく取得したすべてのメッセージを配置するコンテナーが必要です。
<div id="messages">
<! -- message 1 -->
<! -- message 2 -->
<div id="newMessages">
</div>
</div>
次に、fetch-more-method に接続できるボタン (またはアンカーなど) が必要です。
<input type="button" value="Fetch more messages" id="btnFetchMessages" />
DOMReady 内のどこかにフックアップを配置します。
var lastFetchedMessage = 0;
$('#btnFetchMessages').click(function() {
$.ajax({
url: '/getMessages.php',
type: 'POST',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: '{"lastId":'+lastFetchedMesasge+'"}',
success: newMessagesReceived
});
ボタンをクリックすると、AJAX リクエストが送信され、それに基づいて 10 個ほどの次のメッセージが返さgetMessages.php
れます。lastFetchedMessage
そのページから、関心のあるすべての情報を含むメッセージを含むJSON配列を返します。
AJAX リクエストが成功すると、関数newMessagesReceived
が呼び出されます。
function newMessagesReceived(result) {
var container = $('#newMessages');
for(var i = 0; i < result.length; i++) {
var message = $('<div>' + result[i].body + '</div>');
container.append(message);
}
var lastFetchedMessage = result[i].id;
}
上記は、少なくとも次のプロパティを持つメッセージを含む配列を返すことを前提としていbody
ますid
。
[ { "body": "new message1", "id": "10" }, { "body": "new message2", "id": "11" } ]
表示されている行数などの状態情報を保持するには、javascript を使用します。
ajax 経由でデータを返す JS 関数をボタンで呼び出すようにします。ajax 呼び出しの結果は HTML であり、div タグに挿入できます。JS 関数は状態情報を更新する必要があり (毎回行数を増やすなど)、その状態情報を ajax 呼び出しに渡します。
ajax 呼び出しのターゲットは、MySQL クエリを実行し、返される HTML を生成する PHP スクリプトにすることができます。