我正在尝试获取多个数据字符串并将它们放入指定的div中。
我正在构建一个视图更多注释功能,所以当有人点击视图时,它会替换2个强制显示的注释,如果有更多,则替换原来的两个并添加可能在该帖子上的任何内容。
它不工作,我知道它的服务器端PHP脚本是问题,因为我检查了所有带错误报告的ajax。我使用while循环来获取comment_streamitem的所有数据,在我的数据库中有四个结果。它获得了这四个结果(在firebug中看到),但因为json_encode在循环中,我很确定这就是为什么它不进入它的div。但是当我把它放在div之外时它只能获得1个结果。
我如何解决这个问题?
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);
好的以上我现在在firebug得到以下回复,但它在div中发布了1条评论,一切都未定义。我也包括了ajax调用
{
"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"}
}
Ajax脚本:
<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>
答案 0 :(得分:1)
您在循环中覆盖结果:
$json['comment_id'] = $resultArr['comment_id'];
// etc.
应该是这样的:
$json[$resultArr['comment_id']]['comment_id'] = $resultArr['comment_id'];
^^^^^^^^^^^^^^^^^^^^^^^^ or you use a counter or something similar
// etc.
在sql查询中使用它们之前,还应该使用预准备语句或转义变量。
答案 1 :(得分:1)
这个简单的循环应该为你提供对象数组
对于您尝试合并的用户数据,最好是创建JOIN查询。
在循环中运行SELECT查询可能很昂贵。
$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);
}