【问题标题】:Passing json array into jquery将json数组传递给jquery
【发布时间】:2011-11-13 22:15:11
【问题描述】:

我在 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>

我一直在努力思考如何让它发挥作用,但想不出任何办法,有人有什么建议吗?

【问题讨论】:

    标签: jquery mysql ajax arrays json


    【解决方案1】:

    考虑一下,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"}]]
    

    【讨论】:

      【解决方案2】:

      尝试删除内部$.each 并执行以下操作:

      $.each(data, function() { $('.results').append('<li id='+this.id+'>'+this.info+'</li>'); });

      【讨论】:

      • 我认为您的意思是 this 而不是 data
      【解决方案3】:

      试试:

      $.each(data, function() {
          $('.results').append('<li id="' + this.id + '">' + this.info + '</li>');  
      });
      

      但是,DOM 操作很慢,虽然这对于少量结果不会很明显,但如果您同时添加大量 &lt;li&gt;,您会发现以下代码更高效:

      var str = '';
      $.each(data, function() {
          str += '<li id="' + this.id + '">' + this.info + '</li>';  
      });
      $('.results').append(str);
      

      比你想象的要容易得多,是吗? :)

      编辑:简要说明此方法有效的原因,而您的无效:

      你得到的是一个对象数组。当您通过 data 调用 $.each 时,它会遍历数组。在你传递给each的回调函数内部,this等于数组中的当前元素;这是对象。所以我们访问对象的idinfo 属性(this.idthis.info),并从中构建一个&lt;li&gt;

      【讨论】:

      • 我得到了同样的结果,就在 10 秒后,哈哈!
      • 我会再次为此 +1 以进行适当的解释,唉,我已经对此投了赞成票,呵呵
      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      相关资源
      最近更新 更多