通过AJAX获取PHP数组

时间:2015-09-21 17:07:23

标签: javascript php jquery ajax

我想用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);
        }
    }

4 个答案:

答案 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)

你所走的道路几乎完全铺好。除以下情况外,您需要注意:

  1. 您应该在while循环之外以JSON格式回显结果数组。
  2. 由于您已在ajax调用中指定dataTypejson(并告诉jQuery您希望从服务器返回json),$.ajax将处理标题本身因此不需要header('Content-type: application/json');
  3. 对您在$comments数组上执行的作业进行一些调整:

    $comments[] = array(                            // without [] you'll always end up with ONE comment
                        'id' => $row['id'],
                        'name' => $row['name'],
                        'text' => $row['text'],
                        'date' => $row['date']
                        ); 
    
  4. 正如您巧妙地暗示的那样,您需要逐个迭代返回的数组并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
       });
    }, //...         
    
  5. 注意:您正在执行的数组作业中存在拼写错误,只需删除)行上的'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));
}
  

还返回状态和响应,以便更容易操作响应