2011-01-29 25 views
1
私は私の記事の後にコメントシステムを追加したい

php mysql_queryにjQuery.ajax()関数のデータオプションを書き込む方法は?

PHPの部品コード

<?php 
... 
while($result = mysql_fetch_array($resultset)) 
{ 
$article_title = $result['article_title']; 
... 
?> 
<form id="postform" class="postform"> 
<input type="hidden" name="title" id="title" value="<?=$article_title;?>" /> 
<input type="text" name="content" id="content" /> 
<input type="button" value="Submit" class="Submit" /> 
</form> 
... 
<?php 
} 
?> 

Ajaxの一部:

$(function($) { 
$(document).ready(function(){ 
$(".Submit").click(function(){ 
var id = $(this).attr("id"); 
var name = $(this).attr("name"); 
var dataString = 'id='+ id ; 
var parent = $(this); 
var anyBlank = 0; 
if(anyBlank == "0") 
{ 
var title = $("#title").val(); 
var content = $("#content").val(); 
$.ajax({ 
type: "POST", 
url: "ajax_post.php", 
data: "title="+title+"&content="+content, 
success: function(date_added){ 
if(date_added != 0) 
{ 
structure = '<div class="comment_date_added">'+date_added+'</div><div id="comment_text"><div id="comment_content">'+content+'</div>';     
$("#post_comment").prepend(structure); 
} 
}); 
}); 

ajax_post.php

echo $title; 
echo $content;//get $title and $content and insert into database. 

私の質問: <form id="postform" class="postform">は、MYSQL_QUERYの結果circlに書き込まれます。 e。どのようにすべてのdiv.submitajax_post.phpに独自の値を投稿し、$("#post_comment").prepend(structure);にデータを返すことができるようにajaxの部分を変更するすべてのおかげで。

答えて

2

IDではなく、入力フィールドにを入力する必要があります。 IDは、HTML文書で一意である必要があります:

<form class="postform"> 
    <input type="hidden" name="title" class="title" value="<?=$article_title;?>" /> 
    <input type="text" name="content" class="content" /> 
    <input type="button" value="Submit" class="Submit" /> 
</form> 

その後、クリックした要素にデータ・ルックアップ・相対を行うことができます。

var title = $(this).siblings('.title').val(); 
var content = $(this).siblings('.content').val(); 

私も自動のためdata属性にオブジェクトを渡すことをお勧め値のURLエンコード:あなたは#post_commentセクションの新しいエントリを作成するときに

data: {title: title, content: content} 

その後、あなたはまた、これらの要素を与えなければなりません代わりに、IDのクラスが(とvarを使用することを忘れないでください!):

var structure = '<div class="comment_date_added">'+date_added+'</div><div class="comment_text"><div class="comment_content">'+content+'</div>'; 

以上のjQueryのような:

$('<div />', {class:'comment_data_added'}) 
.append($('<div />', {class: 'comment_date_added', text: date_added})) 
.append($('<div />', {class: 'comment_content', text: content})) 
.prependTo('#post_comment'); 

さらに注記:あなたが持っている

  • 何らかの形でネストされたready()ハンドラ:

    $(function($) {      // <--┐ 
        $(document).ready(function(){ // <--┴- this is the same 
         //... 
        }); 
    }); 
    

    のどちらかを実行します。

    jQuery.noConflict(); 
    jQuery(function($) { 
        $('.Submit')... 
    )}; 
    

    または

    $(function() { 
        $('.Submit')... 
    )}; 
    
  • をこの部分クリックハンドラで:

    var id = $(this).attr("id"); 
    var name = $(this).attr("name"); 
    var dataString = 'id='+ id ; 
    var parent = $(this); 
    var anyBlank = 0; 
    

    は何もしていないようです。それ以外には、submitボタンにIDはなく、nameはありません。

  • PHPコードの構造によっては、alternative syntax for control structuresをご覧ください。 PHPとHTMLを括弧で囲むことなく簡単に組み合わせることができます。

+0

私は昼食に戻っています。私はあなたの指示に従い、 'id'を' class'に変更し、不要なコードを削除します。しかし '$(this).siblings'を' var title = $(this).siblings( '。title')という行に追加するとval(); var content = $(this).siblings( '。content')。val(); '、データは空になります。 '$(this).siblings'を削除しても、最初の' .Submit'データをデータベースに投稿できます。まだ助けが必要です。 – cj333

+0

@ cj333:投稿したフォームの構造は正確ですか? '$(this).siblings( '。title')'は、submitボタンと同じレベルにある 'title'クラスの要素を見つけるでしょう。代わりに '$(this).closest( 'form')を試すこともできます。find( '。title').val()' –

+0

はいフォームの構造は私の投稿とまったく同じです。私は '$(this).closest( 'form')。find( '。title')。val()'を試してみると、各フォームにデータを送ることができます。しかし、ディスプレイにはまだ問題があります。あなたのメソッドの2つを試してみましたが、 'var'やjqueryのようなものを追加しましたが、どこにでもコメントを投稿すると、mysqlクエリに10個の結果がある場合、'

'記事。 (私はすべてのIDをクラスに変更しました) – cj333