0

私はコメントシステムに取り組んでおり、ajaxを使用してデータベースから最新の10個のコメントをクエリして表示する関数を構築しようとしています。

私が抱えている問題は、ajaxjson_encodeを使用して複数の行を表示する方法がわからないことです。

phpで複数の行を表示する場合は、を使用します.=。これは非常に単純ですが、ajaxとjson_encodeを使用すると、これまでのところ、私の知識では1つの結果しか表示できません。

以下は、複数の行を表示するための私のコードの純粋なPHPバージョンです

public function display_comment(){
    $query = "SELECT * FROM 'comment' WHERE 'user_id' = $user_id ORDER BY 'save_time' DESC LIMIT 10";
    $result = $database->query($query);

    foreach($result as $row){
        $user_id = $row['user_id'];
        $user_name = $row['user_name'];
        $comment = $row['comment'];

        $all_comments .= '<div id="' . $user_id . '"><span>' . $user_name . '</span><span>' . $comment . '</span></div>';
    }
}

ajaxとjson_encodeを使用して、これが単一の結果を返す方法です

public function display_comment(){
    $query = "SELECT * FROM 'comment' WHERE 'user_id' = $user_id ORDER BY 'save_time' DESC LIMIT 10";
    $result = $database->query($query);

    foreach($result as $row){
        $user_id = $row['user_id'];
        $user_name = $row['user_name'];
        $comment = $row['comment'];

        $json_array = array("user_id" => $user_id, "user_name" => $user_name, "comment" => $comment);
        header('Content-type:application/json');
        exit(json_encode($json_array)); // I am using exit instead of echo, because somehow if I use echo, it returns entire html page. 
    }
}

jQueryの部分

$(document).on("click","#view_comment",function(e){
    e.preventDefault();
    $("#view_comment").text("loading..");
    var view_comment = $(this).val(); // Don't worry about this

    $.ajax({
        type:"post",
        data:{"view_comment":view_comment},
        dataType:"json",
        success:function(data){
            $('#ajax_comment').html('<div id="' + data.user_id + '"><span>' + data.user_name + '</span><span>' + data.comment + '</span></div>');
        },
        error:function(data){
            // Error code
        }
    });
});

json_encodeを使用して複数の行を表示するには、コードをどのように変更する必要がありますか?

よろしくお願いします!

4

1 に答える 1

4

単一の行しか表示できない理由は、while()ループの最初の反復後にスクリプトが存在するためです。

exit(json_encode($json_array));

phpを次のように変更します。

public function display_comment(){
  $query = "SELECT * FROM 'comment' WHERE 'user_id' = $user_id ORDER BY 'save_time' DESC LIMIT 10";
  $result = $database->query($query);
  $results = array();
  foreach($result as $row){
    $user_id = $row['user_id'];
    $user_name = $row['user_name'];
    $comment = $row['comment'];

    $results[] = array("user_id" => $user_id, "user_name" => $user_name, "comment" => $comment);

  }
  header('Content-type:application/json');
  exit(json_encode($results)); 
}

Javascript

$(document).on("click","#view_comment",function(e){
    e.preventDefault();
    $("#view_comment").text("loading..");
    var view_comment = $(this).val(); // Don't worry about this

    $.ajax({
        type:"post",
        data:{"view_comment":view_comment},
        dataType:"json",
        success:function(data){
            var html = '', comment;
            for(var i = 0; i < data.length; i++) {
                comment = data[i];
                html += '<div id="' + comment.user_id + '"><span>' + comment.user_name + '</span><span>' + comment.comment + '</span></div>'
            }
            $('#ajax_comment').html(html);
        },
        error:function(data){
            // Error code
        }
    });
});
于 2012-08-02T07:24:43.460 に答える