getJSON + json_encode +查询php

时间:2012-05-08 11:47:17

标签: php getjson json

好的,我改变了这样的剧本!为什么它不工作?!?

demo.php

while($row = mysql_fetch_array($result)){   
    $array[] = array(
        'var1' => $row['var1'],
        'var2' => $row['var2'],
        'var3' => $row['var3'],
        'var4' => $row['var4'],
    );
}
print json_encode($array);

demo.js

$.getJSON("demo.php",function(result){
    $.each(result, function(i, obj){
    $(obj.var1).appendTo('div id="var1"');
    $(obj.var2).appendTo('div id="var2"');
    $(obj.var3).appendTo('div id="var3"');
    $(obj.var4).appendTo('div id="var4"');
});

1 个答案:

答案 0 :(得分:2)

首先,PHP:

如前所述,您不需要在数据库连接中的变量周围引用("),这是毫无意义的。

您还需要在JSON编码之前获取所有行。 变化:

echo json_encode(mysql_fetch_assoc($result));

$return = array();
while ($row = mysql_fetch_assoc($result))
{
    $return[] = $row;
}
echo json_encode($return);

这样就可以返回数据库中的所有行,而不仅仅是第一行。

你的jQuery的下一个:

尝试更改:$('div').html(obj.attribute1+" "+obj.attribute2 ecc...);

致:$(obj.attribute1+" "+obj.attribute2 ecc...).appendTo('div');

或者:$('<div>' + obj.attribute1+" "+obj.attribute2 ecc... + '</div>').appendTo('body');如果您希望每个对象都有自己的容器。

您当前正在执行此操作的方法只是为每次迭代覆盖页面上每个div的HTML,以便div元素最终只包含集合中最后一个对象的详细信息。

< / p>

编辑:

$.getJSON("demo.php",function(result){
    var $id = 0;
    $.each(result, function(i, obj){
        $id ++;
        $('<div id="obj' + $id + '"/>').appendTo('body');
        $('<span class="var1">' + obj.var1 + '</span>').appendTo('div#obj' + $id);
        $('<span class="var2">' + obj.var2 + '</span>').appendTo('div#obj' + $id);
        $('<span class="var3">' + obj.var3 + '</span>').appendTo('div#obj' + $id);
        $('<span class="var4">' + obj.var4 + '</span>').appendTo('div#obj' + $id);
    });
});

编辑2:

如果您尝试将所有元素中的每个“varX”转换为单个div,则只需定义四个div(<div id="var1"/><div id="var2"/>...),然后使用此代码:

$.getJSON("demo.php",function(result){
    $.each(result, function(i, obj){
        $(obj.var1).appendTo('div#var1');
        $(obj.var2).appendTo('div#var2');
        $(obj.var3).appendTo('div#var3');
        $(obj.var4).appendTo('div#var4');
    });
});