我正在解析从Cakephp 2.0 Controller返回的字符串..
我的自动填充代码是..
jQuery("#name").autocomplete( '<?php echo HTTP_PATH.'/lensmaterials/getBrands'; ?>', {
multiple: true,
mustMatch: true,
matchContains: true,
autoFill: false,
dataType: "json",
parse: function(data) {
return $.map(data, function(item) {
return { data: item, value: item.label, result: item.label};
});
},
formatItem: function(item) {
return '<li>' + item.label + '</li>';
}
});
我得到的值类似于Value,而不是undefined,而不是value而不是undefined。 它以萤火虫的错误结束了我。如果我选择的话,则不会在我的文本框中输入值。 我想以美丽的方式享受价值。那是在ul中显示列表的Div,li ...
我的控制器代码是..
public function getBrands(){
$brandList = $this->Brand->find('list',array('fields'=>array('id','brand_name'),'order' => array('Brand.brand_name')));
//pr($brandList); exit;
foreach ($brandList as $key => $name) {
$json_output[]['id'] = $key;
$json_output[]['label'] = $name;
}
echo json_encode($json_output);
$this->autoRender = false;
}
返回JSON字符串是
[{"id":1},{"label":"Bvlgari"},{"id":2},{"label":"Chanel"},{"id":7},{"label":"D & G"},{"id":8},{"label":"Dior"},{"id":10},{"label":"Emporio Armani"},{"id":11},{"label":"Fendi"},{"id":12},{"label":"Giorgio Armani"},{"id":13},{"label":"Gucci"},{"id":14},{"label":"Oakley"},{"id":15},{"label":"Oliver Peoples"},{"id":16},{"label":"Paul Smith"},{"id":4},{"label":"Polo Ralph Lauren"},{"id":18},{"label":"Prada"},{"id":19},{"label":"Prada Linea Rossa"},{"id":20},{"label":"Ray Ban"},{"id":21},{"label":"Tiffany"},{"id":3},{"label":"Tom Ford"}]
最终它没有在我打字时返回。那就是我有Chanel,如果我打字而不是未格式化,那么undefined永远不会继续使用我的密钥。它保持不变。
答案 0 :(得分:0)
我认为你的数据格式是错误的。 id
和label
属性应位于同一对象中。您的一半对象没有label
属性,因此尝试访问它将导致undefined
(即您获得{data: {...}, value: undefined, result: undefined}
)。
将您的生成过程更改为:
foreach ($brandList as $key => $name) {
$json_output[] = array('id' => $key, 'label' => $name);
}
然后输出将是:
[{"id":1,"label":"Bvlgari"},{"id":2,"label":"Chanel"},...]