Javascript 如何从查询中将json数组显示为重复区域

Javascript 如何从查询中将json数组显示为重复区域,javascript,html,json,Javascript,Html,Json,当前所有使用我的jquery$的操作、成功的连接、查询和json_编码返回到我的页面。我不能做的(对json来说也是新的)是如何将返回的值显示为实时提要?我当前的jquery js文件是“jquery-1.7.2.min.js”,代码是 $(document).ready(function(){ setInterval(function(){ $.post('query.php', function(pendingReq){ $('#div_id').

当前所有使用我的jquery$的操作、成功的连接、查询和json_编码返回到我的页面。我不能做的(对json来说也是新的)是如何将返回的值显示为实时提要?我当前的jquery js文件是“jquery-1.7.2.min.js”,代码是

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

);
pendingReq是我从查询返回的数据,当前输出如下所示:
{[0]:“FirstReq”、“[1]:“SecondReq”、..”}
基于数组的mysql查询构建

$res = array("[0]"=>var['1']...);
我对使用json非常陌生,也没有使用太多javascript,但希望返回的数据显示在表中,谢谢

我下面的代码可以工作,但对于mysql查询的一行,如果存在两个条目,我会在Firebug中得到一个“uncaughtSyntaxerror:Unexpected token{”错误,仍然像以前一样返回结果:

    $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);
$res=array(“请求名称”=>$ew\u display['req\u name'],“日期”=>$ew\u display['req\u dt']);
echo json_编码($res);
$(文档).ready(函数(){
var表_template=“JTAR#JTAR@”;
$(“#testd”).html(表格模板);
setInterval(函数(){
$.post(“query.php”,{track:2},函数(pendingReq){
var json=json.parse(pendingReq);
var template=“{req_name}}{{date}}”;
var new_row=Mustache.render(模板,json);
$(“#结果”).append(新的#行).fadeIn(“慢”);
}),“json”
}, 5000);

Chad,请对数组“$res”使用json_encode()

如果php返回字符串,则可以使用

var json = JSON.parse(pendingReq);
一旦获得json对象,就可以使用.operator访问属性

首先找出json包含的内容。。。 做:

stringify将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>");
$(“#表”).html($(“#表”).html()+“”+obj.name+“”+obj.age+“”+obj.job+“”);

jQuery文档展示了如何在ajax回调函数中使用返回的json:

但是,与其将查询结果作为json返回,为什么不返回html(包含结果的表代码),然后直接在div中显示该html呢

下面是这样做的一个示例:

更新:如何以html格式而不是json格式返回数据:

好的,假设您的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;
$lst\u data=json\u decode($str\u json);
$html=“\n\n”;
foreach($i=>$data形式的lst_数据){
$html.=''.$i.'';
$html.=“\n\n”;
foreach($lst_数据作为$data){
$html.=''.$data.'';
}
$html.=“\n\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;
$res=mysql\u fetch\u assoc($data);
//从脚本中删除此选项:echo json_encode($res);
//添加以下内容:
$html=“\n\n”;
foreach($res作为$i=>$r){
$html.=''.$i.'';
$html.=“\n\n”;
foreach($res作为$r){
$html.=“..$r.”;
}
$html.=“\n\n”;
echo$html;
…并记住将jQuery$.post()函数中的数据类型设置为
html

--EDIT--

因为这里有一个间隔,所以模板可以是常量:

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>";
--结束编辑--

我非常喜欢Mustache.js(https://github.com/janl/mustache.js),它允许您将数据(JSON)与演示文稿(HTML表)分离。我不太喜欢从服务器返回预先格式化为HTML的AJAX数据。您可以使用如下语法(仅示例):

var-template=“{{{{item}}{{name}}{{{age}}{{job}}{{/item}}”;
var html=Mustache.render(模板,pendingReq);
$('div_id').html(html);

当我注释掉var json=json.parse(pendingReq)并使用alert(json.stringify(pendingReq))时;我确实看到文本出现在警报窗口中,但是,当我使用var=json尝试上述操作时,我有一个空白屏幕?我又尝试了一件事,从sql中删除了3个表中的2个,输出工作正常,并不断循环相同的输出,所以我现在的问题是,一旦循环查询停止,如何停止显示?如何循环显示json代码到下一个数组?感谢您提供的上述内容。我如何从sql查询中将其作为html返回?htmlentities?只需创建一个包含您想要查看的普通html代码的html字符串,并在脚本末尾回显:
$html='(使用查询中的php数据)…;回显$html;
还可以在.post()中更改数据类型参数函数设置为“html”(或留空)。因此我不明白$lst_data=json_decode($str_json)从何而来。我的php在单独的页面上从我的sql查询中的回声json_encode($res)返回数组{“0”:“FirstReq”…};因此它看起来像是
$res=$lst_data
。在这种情况下,您可以删除脚本中的json_encode和json_decode语句,并确保我代码中的$lst_数据与代码中的$res相同。我不知道这一点!无论如何,如果您没有胡子,直接返回html比通过json ja努力显示数据要好vascript,IMHO.下载了mustache,在我的页面上添加了一个include,并使用了上面的示例,用我的变量替换了姓名、年龄、作业,只剩下一个空白页面(还构建了我自己的div_id)。我已经将上面的示例代码作为我的函数“code'$(document)的一部分。ready(function(){setInterval(function(){$.post(“earf1.php”,function(pendingReq){var template=“{{req_name}}}}{{{date}”;var html=Mustache.render(template,pendingReq);$('#ew').html(html);“json”},5000);“code”@dbasman仍在努力完全理解musta
$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;
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);
    });
});
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);