【Javascript】【PHP】jQueryでajax的なコメント書き込み処理
こんばんは。
今回はjQueryを使って画面遷移なしでajax的にコメントの投稿と表示をしてみたいと思います。
こちらのサイトがとても詳しく書いてあり、非常に参考になりました。
基本的には前のエントリで書いた$.postを用いて実装しています。
DBのテーブルを用意
まずはコメントを格納するテーブルを用意します。
今回は投稿者名(ユーザ名)とコメント内容、投稿日のカラムを用意します。
PHP処理
次にPHP側です。
PHP側ではcomment_send.phpとcomment_list.phpを作りました。
comment_send.phpでは、POSTで与えられた内容をテーブルに格納し、成功したら"OK"、失敗したら"NG"を返す処理にしています。
comment_list.phpでは、コメントの読み込みをしています。読み込みに成功したらコメントリストを表示するHTMLを返し、コメントがない場合は"No Comment"、エラーの場合は"NG"を返すようにしています。
HTML
次にHTML側です。
<div id="comment-list"></div> <div id="comment-input"> <div id="input-names"> <form> <label>ユーザ名<br /><input type="text" name="user_name" placeholder="ユーザ名" /></label><br /><br /> <label>内容<br /><textarea name="message" rows = "7" cols = "35"></textarea></label> <input type="button" id="send-comment" value="投稿" /> <span id="send-comment-error"></span> </form> </div> <div id="input-thanks">コメントが投稿されました。</div> </div>
各div(span)タグの役割は以下の通りです。
- comment-list
- コメントリストが表示される領域です。
- input-names
- フォーム領域です。
- send-comment-error
- エラーを表示する領域です。
- input-thanks
- 投稿が成功したときに表示する領域です(デフォルトではCSSで display:none として非表示にしています)
JavaScript
次にjQueryのほうです。
// コメント投稿ボタンを押したらsendComment()を実行 $("#send-comment").click(function(){ if (confirm("投稿しますか?")) // OKボタンが押されたとき sendComment(); }); // 既存コメント読み込んで表示 getComment(); // コメント送信 function sendComment(){ $("#send-comment-error").text(""); if (!$("textarea[name=message]").val()){ $("#send-comment-error").text("コメントを入力してください。"); return false; } var user_name; // ユーザ名格納変数 if (!$("input[name=user_name]").val()) user_name = "名無し"; else user_name = $("input[name=user_name]").val(); $.post("comment_send.php", {"user_name":user_name, "message": $("textarea[name=message]").val()}, function(data){ // 書き込み完了したらMessageを出力しコメント一覧を読み込む if (data === "NG"){ // コメントの投稿に失敗した場合 $("#send-comment-error").text("コメントの投稿に失敗しました。もう一度やってみてください。"); return false; }else{ // コメント投稿に成功した場合 getComment(); $("#input-thanks").show("slow"); } }); } // コメント一覧表示 function getComment(){ $.post("comment_list.php", null, function(data){ if (data === "NG"){ $("#send-comment-error").text("コメントの読み込みに失敗しました。リロードしてみて下さい。"); return false; }else if (data === "No Comment") $("#comment-list").text("コメントがありません。"); else{ $("#comment-list").html(data); } }); }
最初にconfirmで確認ダイアログを出しています。
また、ユーザ名が入力されていない場合は「名無し」としてDBに格納します。
getComment()では、コメントリストのHTMLが帰ってくるので、jQuery.htmlを使って直接HTMLソースを追記しています。
以上です。
やはりコメント投稿はajaxだと嬉しいですよね。
それでは。