0

我正在尝试将一个 PHP 数组传递给我的视图,然后使用该数组来填充 jQuery 自动完成功能。

foreach ($products as $product)
{               
    $productsArray[] = array('label' => $product->getName()  ,'id' => $product->getId() , 'value' => $product->getUrlSafeName());                           
}

$productsJson = json_encode($productsArray);

$productsJson然后传递给视图,我将它插入到 DOM 中。我使用 Twig 作为我的模板引擎:

<div id="autocompleteData">{{ productsJson }}</div>

然后是我的 jQuery:

$( document ).ready(function() {

    var autocompleteData = $('#autocompleteData').text();       

    $('#findoffice_location').autocomplete({ 
         source: autocompleteData,
         change: function (event, ui) {  } });

});

如果我 console.log autocompleteData,它在结构上“看起来”像一个 JSON 对象,但不是。

如果我做:

var autocompleteData = [{"label":"Toybox","id":1,"value":"toybox"},{"label":"Shoe","id":2,"value":"shoe"},{"label":"Eggs","id":3,"value":"eggs"}];

然后是 consolelog ,每个 autocompleteData 产品都是一个适当的 JSON 对象,并且自动完成按预期工作。

4

2 回答 2

1

您需要将字符串输出转换.text()为 JSON:

source: jQuery.parseJSON(autocompleteData)

当您手动输入它时,您输入的是实际的 JSON,这就是它起作用的原因。

于 2013-10-02T10:33:03.907 回答
0

尝试autocompleteData像这样调用 $.parseJON :

$( document ).ready(function() {

    var autocompleteData = $('#autocompleteData').text();       

    $('#findoffice_location').autocomplete({ 
        source: $.parseJON(autocompleteData),
        change: function (event, ui) {  } });

});

编辑@George 打败了我。

于 2013-10-02T10:37:50.533 回答