我在jquery中格式化json数组时遇到了麻烦,我似乎无法找到合适的答案。
我有一个用户的mysql数据库,以json格式输出用户ID和名称。
$result = mysql_query("SELECT id,info FROM users WHERE info like '$keyword%'");
while($row=mysql_fetch_assoc($result))
$return[] = $row;
echo json_encode($return);
导致此输出:
[{"id":"1","info":"Mike"},{"id":"2","info":"Sally"},{"id":"3","info":"Ben"}]
我的jquery成功如下:
$.each(data, function()
{
$.each(this, function(k, v)
{
$('.results').append('<li id='+k+'>'+v+'</li>');
});
});
导致此输出:
<li id='id'>1</li>
<li id='info'>Mike</li>
<li id='id'>2</li>
<li id='info'>Sally</li>
etc...
但我想读它:
<li id='1'>Mike</li>
<li id='2'>Sally</li>
<li id='3'>Ben</li>
我一直试图将我的大脑包围起来如何让这个工作起来但却无法提出任何建议,是否有人有任何建议?
答案 0 :(得分:5)
尝试:
$.each(data, function() {
$('.results').append('<li id="' + this.id + '">' + this.info + '</li>');
});
然而,DOM操作很慢,虽然这对于少量结果来说并不明显,但如果你同时添加了很多<li>
,你会发现以下代码更有效:
var str = '';
$.each(data, function() {
str += '<li id="' + this.id + '">' + this.info + '</li>';
});
$('.results').append(str);
比你想象的容易得多,是吗? :)
编辑:为什么会这样有效的简要说明,而你的没有:
你得到的是一系列物体。当你在data
上调用$ .each时,它会遍历数组。在传递给each
的回调函数中,this
等于数组中的当前元素;这是对象。因此,我们会访问对象的id
和info
属性(this.id
和this.info
),并从中构建<li>
。
答案 1 :(得分:1)
尝试删除内部$.each
并执行:
$.each(data, function()
{
$('.results').append('<li id='+this.id+'>'+this.info+'</li>');
});
答案 2 :(得分:0)
考虑一下,PHP的关联数组是JavaScript的一个对象。 此外,您的JSON超出了大小的荒谬。 (索引索引)
var name=["Mike","Sally","Ben"];
for(var i=0;i<name.length;i++){//Yes, it has a length.
$('.results').append('<li id='+i+'>'+name[i]+'</li>');
}
就足够了。 如果你坚持你的解决方案 - 你忘了一些括号。
[[{"id":"1","info":"Mike"}],[{"id":"2","info":"Sally"}],[{"id":"3","info":"Ben"}]]