如何通过`echo json_encode($ data);`获取所有数据

时间:2015-02-25 17:07:44

标签: javascript php jquery ajax json

如果在最近15秒内在sql中添加了新数据,我想通过以下脚本更新用户墙。

如果我只在server.php文件中使用一个数据$data = $row['description'];,那么它会更新。

当我要对server.php文件中的所有数据进行排序以显示完整帖子并使我的脚本如下所示时,它会持续显示[object Object]

所以我想用用户img,名字,细节等显示新添加的完整帖子。

  

但我不知道该怎么做。

请给我一个指导。

server.php

include("../db.php");
global $dbh;
header('Content-Type: application/json; charset=utf-8');
while (true) {
date_default_timezone_set('Asia/Dhaka');
//fetch data 
$datetime = date('Y-m-d H:i:s', strtotime('-15 second'));
$results = mysqli_query($dbh,"SELECT * FROM comments WHERE qazi_id='1012' AND date >= '$datetime' ORDER BY date DESC LIMIT 1") or die(mysqli_error($dbh));
$rows =  mysqli_fetch_assoc($results);

$data = array();

$data['id'] = $rows['id'];
$data['qazi_id'] = $rows['qazi_id'];
$data['likes'] = $rows['likes'];
$data['username'] = $rows['username'];
$data['img'] = $rows['img'];
$data['description'] = $rows['description'];
$data['url'] = $rows['url'];
$data['parent_id'] = $rows['parent_id'];
$data['date'] = $rows['date'];

//has data
if (!empty($data)) {
    echo json_encode($data);
    flush();
    exit(0);
}
sleep(5);
}

JS脚本:

function addmsg(type, msg){
    $("#messages").append(
        "<div class='msg "+ type +"'>"+ msg +"</div>"
    );
}

function waitForMsg(){
    $.ajax({
        type: "GET",
        url: "server.php",
        async: true, 
        cache: false,
        timeout:15000, 
        success: function(data){ 
            addmsg("new", data); 
            setTimeout(
                waitForMsg, 
                1000 
            );
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            setTimeout(
                waitForMsg, 
                15000); 
        }
    });
};

$(document).ready(function(){
    waitForMsg(); 
});

HTML:

<div id="messages">

</div>

2 个答案:

答案 0 :(得分:2)

您必须引用对象的属性,而不是对象本身。例如,要显示说明:

function addmsg(type, msg){
    $("#messages").append(
        "<div class='msg "+ type +"'>"+ msg.description +"</div>"
    );
}

或者,只需将描述传递给您的函数:

success: function(data){ 
            addmsg("new", data.description); 
            setTimeout(
                waitForMsg, 
                1000 
            );
        },

答案 1 :(得分:0)

在&#34;简单&#34;示例($data = $row['description'];)您的数据将作为字符串返回,这就是它的工作原理。当您将对象发送回页面时,事情变得更加困难。您仍然尝试将对象打印为字符串(JavaScript会翻译并向您显示[Object Object],表示您实际检索了一个对象)。您需要向msg提供正确的索引/密钥以检索正确的信息。

例如:msg['description']应返回说明。

function addmsg(type, msg){
    $("#messages").append(
        "<div class='msg "+ type +"'>"+ msg["description"] +"</div>"
    );
}

基本上你的数据是以

的形式返回的
msg = {
         "username" : "foo",
         "description" : "bar",
         etc....
      }

它作为JavaScript对象返回,您可以从中正常检索属性。

  • msg.username
  • msg["username"]

要构建消息,您需要构建包含msg(或data)各种属性的消息对象。

function addmsg(type, msg){
    $("#messages").append(
        "<div class='msg "+ type +"'>User " + msg["username"] + "sent: " + msg["description"] +"</div>"
    );
}