使用PHP中的JSON数据填充jQuery Select2()控件

时间:2015-07-06 09:19:09

标签: javascript php arrays jquery-select2

我已经多次做了同样的事情(实际上也是在同一个项目上)并且工作正常。我对这个相同代码的实例有一个问题。 首先,我从db表中选择一些数据:

$azioni = $pdo->query("SELECT id_az, concat_ws('-',Descrizione, RGE) as descrizione 
                       FROM azioni_head 
                          JOIN sofferenze ON sofferenze.id_soff = azioni_head.id_soff
                        ORDER BY Descrizione")
               ->fetchAll(PDO::FETCH_ASSOC);

这给了我一个像这样的数组(只是前几项):

Array
(
    [0] => Array
        (
            [id_az] => AZ000000126
            [descrizione] => Acciaierie Weissenfels S.p.A.-n/d
        )

    [1] => Array
        (
            [id_az] => AZ000000017
            [descrizione] => Acofer S.p.A.-n/d
        )
)

然后我在Json数组中转换此数组:     var azioni = <?php echo json_encode($azioni); ?>; 最后我用这些数据填充了Select2,但这次select2里面没有任何项目。 如果我在使用alert(azioni.join( ));编码后尝试查看数组,我得到:

  

[object Object],[object Object],[object Object],[object Object],

最后我跑:

$('#cod_az').select2({ placeholder: "Scegli", data: azioni });

有什么问题?为什么我不能用这个数组用数据填充Select2?它适用于我的应用程序的其他部分!

修改 这是firebug中console.log(azioni)的结果:

[
Object { id_az="AZ000000126",  descrizione="Acciaierie Weissenfels S.p.A.-n/d"}, 
Object { id_az="AZ000000017",  descrizione="Acofer S.p.A.-n/d"}, 
Object { id_az="AZ000000039",  descrizione="ADANI SAS DI ADANI PAOLO & C. S.p.A.-n/d"}, 
Object { id_az="AZ000000019",  descrizione="Administration Speciale ...NG S.A. en faillite-n/d"}
]

2 个答案:

答案 0 :(得分:6)

要进行调试,请使用console.dir(azioni);检查对象。

将您的id_azdescrizione密钥更改为idtext

var data = [{ id: 0, text: 'item1' }, { id: 1, text: 'item2' }];

$(".js-example-data-array").select2({
  data: data
})

https://select2.github.io/examples.html

默认情况下,jquery select2期望数据采用id / text格式。

答案 1 :(得分:0)

这是标准和期望的行为。你想要的是检查对象的内容而不是获取[object Object]字符串,这是toString()方法的正确结果。

有几种方法可以在Javascript中检查数组和对象的结构。我做的很简单,效果很好但是它里面有一些扭曲

var data = JSON.parse(input);
// data now contains the JSON data
// to print it on-screen I do:
alert(JSON.stringify(data));

将数据重新编码为JSON可能听起来很奇怪,但您已完全转入:

  • 解析JSON
  • 渲染JSON

因此,您确实可以确信input字符串是有效的JSON,而您在alert()中看到的是实际内容。我不知道比这更简单的方法。

编辑:请注意,这与直接打印input字符串不同。 decode / recode 转向确实为您做了很多工作:它表明它可以解码JSON并向您展示解码后的实际情况。例如,不保留属性的顺序。