2012-04-02 43 views
0

重复区域目前,所有与我的jQuery .post的$行动,成功连接,查询和json_encode回归到我的网页的工作。我无法做的(而且是json的新功能)是如何将返回的值显示为实时Feed?我目前的jQuery的js文件是“jQuery的1.7.2.min.js”和我的代码是如何显示JSON数组从查询

$(document).ready(function(){ 
     setInterval(function(){ 
     $.post('query.php', function(pendingReq){ 
     $('#div_id').html(pendingReq); 
     }), 'json' }); 
    }, 5000 

); 

pendingReq就像是从查询和电流输出我返回的数据如下:根据我的MySQL查询 {"[0]":"FirstReq", "[1]":"SecondReq", ...."}建立数组

$res = array("[0]"=>var['1']...); 

的我是很新的使用JSON和不使用大量的JavaScript,但希望能有返回的数据在表中显示出来,谢谢。下面

我的代码工作,但对于MySQL查询的只有一行,如果两个条目存在,我得到一个“未捕获的SyntaxError:意外的标记{”在Firebug的错误?尽管如此返回结果为前:

$res = array("req_name"=>$ew_display['req_name'], "date"=>$ew_display['req_dt']); 
echo json_encode($res); 



$(document).ready(function(){ 
      var table_template = "<table border=1 cellspacing=0 id='results'><tr><th>JTAR #</th><th>JTAR @</th></tr></table>"; 
      $("#testd").html(table_template); 
    setInterval(function(){ 
     $.post("query.php", {track : 2}, function(pendingReq){ 
      var json = JSON.parse(pendingReq); 
      var template = "<tr><td>{{req_name}}</td><td>{{date}}</td></tr>"; 
      var new_row = Mustache.render(template, json); 
      $("#results").append(new_row).fadeIn("slow"); 
     }), "json" 
}, 5000); 
+0

@dbaseman有什么想法?第一个问题是我的jquery语句,它错了,现在我猜这是由回调中的数组引起的? – 2012-05-10 13:19:24

回答

1

- 编辑 -

既然你已经在那里有一个时间间隔,模板可以是不变的:

var table_template = "<table border=1 cellspacing=0 id='results_table'><tr><th>col1</th><th>col2</th></tr></table>"; 
$("#div_id").html(table_template); 
var template = "<tr><td>{{[0]}}</td><td>{{[1]}}</td></tr>"; 

现在的时间间隔,您可以分析结果字符串并呈现每个行:

setInterval(function() { 
    $.post("query.php", function(pendingReq) { 
     var json = JSON.parse(pendingReq); 
     var new_row = Mustache.render(template, json); 
     $("#results_table").append(new_row); 
    }); 
}); 

- 编辑完 -

我Mustache.js的大风扇(HTTPS ://github.com/janl/mustache.js),它允许您从演示文稿(HTML表格)中分离数据(JSON)。我不喜欢从预格式化为HTML的服务器返回AJAX数据。你可以使用这样的语法(仅用于示例):

var template = "<table>{{#item}}<tr><td>{{name}}</td><td>{{age}}</td><td>{{job}}</td></tr>{{/item}}</table>"; 
var html = Mustache.render(template, pendingReq); 
$('#div_id').html(html); 
+0

不知道这个!无论如何,如果你没有胡须,直接返回HTML比通过javascript,恕我直言,努力显示json更好。 – Stefan 2012-04-02 18:33:08

+0

下载胡子,在我的页面上做了一个包含,并使用了上面的例子,并用我的变量替换了名字,年龄,作业,并且只是一个空白页面(也构建了我自己的div_id)。我已经将上面的示例代码作为我的函数'代码'的一部分$(document).ready(function(){set_interval(function(){ \t \t $ .post(“earf1.php”,function(pendingReq ){ \t \t \t VAR模板= “

​​{{req_name}}​​{{日期}}
”; \t \t \t \t \t \t变种HTML = Mustache.render(templa te,pendingReq); \t \t \t $('#ew')。html(html); \t \t \t}), \t“json”}); 'code' – 2012-04-03 06:55:36

+0

@dbaseman仍然努力完全理解小胡子的方式,我相信这是我的查询返回字符串不是一个对象,因为它显示{“0”:“val1”,“1 “:”val2“...},这是正确的吗? – 2012-04-04 02:55:18

0

乍得,请使用json_encode()为您的数组 “$ RES”

echo json_encode($res); 

如果PHP返回一个字符串,那么你可以使用

var json = JSON.parse(pendingReq); 

一旦你得到json对象,你可以使用。操作员访问属性。

首先找出你的JSON包含... 做:

alert(JSON.stringify(json)); 

转换字符串化JSON对象以可读的字符串 你可以转换回使用JSON.parse; 您可以访问做json.property属性。

现在你可以拥有不断更新的所有数据表。 考虑的对象是这样的: VAR OBJ = {名称: “亚当”,年龄:35,职业: “程序员”}; 您可以通过此信息添加到表:

$("#table").html($("#table").html() + "<tr><td>" + obj.name + "</td><td>" + obj.age + "</td><td>" + obj.job + "</td></tr>"); 
+0

当我注释掉var json = JSON.parse(pendingReq);并使用警报(JSON.stringify(pendingReq));我确实看到文本出现在警告窗口中,但是当我用var = json尝试上述内容时,我有一个空白屏幕? – 2012-04-02 09:53:03

+0

尝试了一件事,从sql中删除了3个表中的2个,并且输出工作,并且无限循环地保持相同的输出,所以现在我的问题是,一旦循环查询停止后如何停止显示?我如何循环json代码到下一个数组?感谢您的上述也 – 2012-04-02 12:00:28

0

jQuery的文档说明了如何使用其返回,Ajax回调函数内部JSON:http://api.jquery.com/jQuery.getJSON/

但不是返回查询结果JSON,你为什么不返回HTML(包含你的结果表的代码),然后直接显示一个div内部的HTML?

这里做这样的事情的一个例子: Modifying the AJAX PHP database example

UPDATE:如何返回数据作为HTML而不是JSON:

OK,让我们假设你的PHP脚本目前返回一个JSON编码字符串:

$str_json = '{"0":"FirstReq", "1":"SecondReq", ...."}'; 

现在做这样的事情在PHP脚本 - 这取决于你想显示当然什么:

$lst_data = json_decode($str_json); 

$html = "<table>\n<tr>\n"; 
foreach ($lst_data as $i => $data) { 
    $html .= "<th>" . $i . "</th>"; 
$html .= "</tr>\n<tr>\n"; 
foreach ($lst_data as $data) { 
    $html .= "<td>" . $data . "</td>"; 
} 
$html .= "</tr>\n</table>\n"; 

echo $html; 

编辑:你可能有类似这样的东西:

$res = mysql_fetch_assoc($data); 

// Remove this from your script: echo json_encode($res); 

// Add this: 
$html = "<table>\n<tr>\n"; 
foreach ($res as $i => $r) { 
    $html .= "<th>" . $i . "</th>"; 
$html .= "</tr>\n<tr>\n"; 
foreach ($res as $r) { 
    $html .= "<td>" . $r . "</td>"; 
} 
$html .= "</tr>\n</table>\n"; 

echo $html; 

...并记得设置的dataType jQuery的$。员额()函数来html

+0

我将如何返回它作为我的SQL查询的HTML?ヶ辆? – 2012-04-02 18:07:20

+0

只需创建一个包含您想要查看的普通html代码的html字符串,并在脚本结尾处回显此内容:'$ html ='

...(使用查询中的php数据)..“
'; echo $ html;' – Stefan 2012-04-02 18:15:37

+0

也将.post()函数中的dataType参数更改为'html'(或将其留空)。 – Stefan 2012-04-02 18:21:42