dongwuchu0314 2014-08-25 22:30
浏览 62
已采纳

多个Json字符串?

I'm trying to get multiple strings of data and put them into there designated divs.

I'm building a view more comments function, so when someone clicks on view all it replaces the 2 compulsory shown comments and if there is more then replace the original two and add any more that may be on that post.

Its not working and I know for a fact its the server side php script that is the issue as Ive checked all the ajax with error reporting. I use the while loop to grab all the data against comment_streamitem and in my database there is four results. it gets these four results(Seen in firebug) but because the json_encode is in the loop i'm pretty sure this is why its not going into its div. But when I put it outside the div it only grabs 1 result.

How would I get around this?

if(isset($_GET['comment_streamitem'])){
$id=$id=mysqli_real_escape_string($mysqli,$_GET['comment_streamitem']);

$check = "select comment_id,comment_poster,comment_streamitem,comment_datetime,comment_content FROM streamdata_comments WHERE comment_streamitem='$id' order by comment_id";
$check1 = mysqli_query($mysqli,$check) or die(mysqli_error($mysqli));
    $json = array();
while($resultArr = mysqli_fetch_array($check1)){


$json[$resultArr['comment_id']]['comment_id'] = $resultArr['comment_id'];
$json[$resultArr['comment_poster']]['comment_poster'] = $resultArr['comment_poster'];
$json[$resultArr['comment_streamitem']]['comment_streamitem'] = $resultArr['comment_streamitem'];
$json[$resultArr['comment_datetime']]['comment_datetime'] = $resultArr['comment_datetime'];
$json[$resultArr['comment_content']]['comment_content'] = $resultArr['comment_content'];

$user=$resultArr['comment_poster'];
$check2= "SELECT * FROM user WHERE id='$user'";
$check22 = mysqli_query($mysqli,$check2);
$resultArr = mysqli_fetch_array($check22);
$json[$resultArr['username']]['username'] = $resultArr['username'];
$json[$resultArr['id']]['id'] = $resultArr['id'];
$json[$resultArr['first']]['first'] = $resultArr['first'];
$json[$resultArr['middle']]['middle'] = $resultArr['middle'];
$json[$resultArr['last']]['last'] = $resultArr['last'];


}
}
echo json_encode($json);

Ok with the above I now get the below response in firebug but its posting 1 comment into the div and everything is undefined. I've included the ajax call too

    {
    "1687": {"comment_id": "1687"},
    "33": {"comment_poster": "33", "id": "33"},
    "223": {"comment_streamitem": "223"},
    "2014-08-23 17:24:10": {"comment_datetime": "2014-08-23 17:24:10"},
    "ggg": {"comment_content": "ggg"},
    "luce": {"username": "luce"},
    "lucy": {"first": "lucy"},
    "": {"middle": ""},
    "ward": {"last": "ward"},
    "1688": {"comment_id": "1688"},
    "2014-08-23 17:24:13": {"comment_datetime": "2014-08-23 17:24:13"},
    "hh": {"comment_content": "hh"},
    "1689": {"comment_id": "1689"},
    "2014-08-23 17:24:15": {"comment_datetime": "2014-08-23 17:24:15"},
    "kkk": {"comment_content": "kkk"},
    "1690": {"comment_id": "1690"},
    "2014-08-23 17:24:17": {"comment_datetime": "2014-08-23 17:24:17"},
    "kk": {"comment_content": "kk"}
}

The Ajax script:

<script type="text/javascript">
$(function()
{
$(".view_comments").click(function()
{
var ID = $(this).attr("id");

$.ajax({
type: "GET",
url: 'viewmorecommentslink.php?comment_streamitem='+ ID,
dataType: 'json',
success: function(response){
$("#comment_list_"+ID).html('<div class="stream_comment" id="comment_'+response['comment_id']+'" style="margin-top:0px;">\
<table width=100%><tr><td valign=top width=30px><img class="stream_profileimage" style="border:none;padding:0px;display:inline;" border=\"0\" src=\"userimages/cropped'+response['comment_poster']+'.jpg\" onerror=this.src=\"userimages/no_profile_img.jpeg\" width=\"40\" height=\"40\" ></a><td valign=top align=left>\
<a href="/profile.php?username='+response['username']+'">'+response['first']+' '+ response['middle']+' '+response['last']+'</a> - <abbr class="timeago" title='+response['comment_datetime']+'>'+response['comment_datetime']+'</abbr>\<div class="commentholder">'+response['comment_content']+'</div><br/>\<div id="commentactivitycontainer">\
<a style="cursor:pointer;" onClick=\"deletecomment('+response['comment_id']+',comment_'+response['comment_id']+');\">Delete</a><a id="likecontext_'+response['comment_id']+'" style="cursor:pointer;" onClick=\"likestatuscomment('+response['comment_id']+',this.id);\">\
<div style="width:80px; position:relative; float:left; left:40px" id="likescommentprint'+response['comment_id']+'">Like</div></a><div style="width:80px; position:relative; float:left; left:40px" id="likescommentprint'+response['comment_id']+'"></div>\
</form><a id="dislikecontext_'+response['comment_id']+'" style="cursor:pointer;" onClick=\"dislikestatuscomment('+response['comment_id']+',this.id);\"><div style="width:90px; position:relative;top:-0px; float:left; left:200px" id="dislikescommentprint'+response['comment_id']+'">Dislike</div>\
</a><div style="width:90px; position:relative; top:-0px; float:left; left:200px" id="dislikescommentprint'+response['comment_id']+'"></div></form></div></table></div></div>');
$("#view"+ID).remove();

}   
});
return false
});
});
</script>
  • 写回答

2条回答 默认 最新

  • dskyx46424 2014-08-26 00:08
    关注

    Just this simple loop should give you the array of objects

    As for the user data that you are trying to merge, it is better if you can create a JOIN query.

    Running SELECT query in a loop could be expensive.


    $sql="
        SELECT streamdata_comments.comment_id
              ,streamdata_comments.comment_poster
              ,streamdata_comments.comment_streamitem
              ,streamdata_comments.comment_datetime
              ,streamdata_comments.comment_content 
              ,user.username
              ,user.id
              ,user.first
              ,user.middle
              ,user.last
        FROM streamdata_comments 
        INNER JOIN user
        ON streamdata_comments.comment_poster=user.id
        WHERE streamdata_comments.comment_streamitem = $id
        ORDER BY streamdata_comments.comment_id
    "
    ;
    
    
    
    $result = mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
    $json = array();
    while($row = mysqli_fetch_array($result)){
        array_push($json, $row);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python