我想用AJAX创建评论,我不知道这是我第一次这样做的正确方法。我一直在谷歌搜索几个小时,我真的卡住了。
我想要实现的是在点击“评论”按钮后立即添加评论而不重新加载页面。
我不知道如何创建适合我需要的JSON数组。
这是我的javascript:
$(function(){
var userComments = $('.userComments');
var commentsUrl="commentsLoad.php";
$.ajax({
type: 'GET',
url: commentsUrl,
dataType: "json",
success: function(komentarji){
//$.each ...
userComments.append("output...");
},
error: function(e){
console.log(e);
}
});
});
这是我的PHP:
include('config.php');
$comments=array();
$commentsQuery = "SELECT * FROM komentarji";
$result = $conn->query($commentsQuery);
if($result->num_rows>0){
while($row = $result->fetch_assoc()){
$comments=array(
'id' => $row['id'],
'name' => $row['name'],
'text' => $row['text'],
'date' => $row['date'])
);
header('Content-type: application/json');
echo json_encode($comments);
}
}
答案 0 :(得分:3)
首先,将数据返回到while循环中的javascript代码,这样你只需要执行一次。然后稍微更改脚本,以便将每个注释添加到$comments
数组中的新事件。
include('config.php');
$comments=array();
$commentsQuery = "SELECT * FROM komentarji";
$result = $conn->query($commentsQuery);
if($result->num_rows>0){
while($row = $result->fetch_assoc()){
$comments[] = array(
'id' => $row['id'],
'name' => $row['name'],
'text' => $row['text'],
'date' => $row['date'])
);
}
}
echo json_encode($comments);
exit;
答案 1 :(得分:2)
你所走的道路几乎完全铺好。除以下情况外,您需要注意:
while
循环之外以JSON格式回显结果数组。dataType
为json
(并告诉jQuery您希望从服务器返回json
),$.ajax
将处理标题本身因此不需要header('Content-type: application/json');
。对您在$comments
数组上执行的作业进行一些调整:
$comments[] = array( // without [] you'll always end up with ONE comment
'id' => $row['id'],
'name' => $row['name'],
'text' => $row['text'],
'date' => $row['date']
);
正如您巧妙地暗示的那样,您需要逐个迭代返回的数组并append
每个注释:
success: function(komentarji){
var parsedComments = JSON.parse(komentarji); //parse the result to Javascript readable objects
$.each(parsedComments, function(){
userComments.append("id =>" + this.id + " name => " + this.name + " text =>" + this.text /* etc. */); //you can access each column key as javascript object key here
});
}, //...
注意:您正在执行的数组作业中存在拼写错误,只需删除)
行上的'date' => $row['date'])
即可。< / p>
答案 2 :(得分:0)
您不能发送多个json输出,但是在while
循环的每次迭代中发送一个
也无法继续添加标题
您要发送的内容将是
{"id": 3 , "name": "foo"}
{"id": 4 , "name": "bar"}
请注意,没有外部数组包装这些或逗号分隔它们。 因此,当它们一起发送时它们是无效的json。
将所有评论放入一个数组并发送
答案 3 :(得分:0)
试试这个:
include('config.php');
$comments = array();
$commentsQuery = "SELECT * FROM komentarji";
$result = $conn->query($commentsQuery);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
array_push($comments, array('id' => $row['id'], 'name' => $row['name'], 'text' => $row['text'], 'date' => $row['date']));
}
return json_encode(array('status' => true, 'data' => $comments));
} else {
return json_encode(array('status' => false));
}
还返回状态和响应,以便更容易操作响应