0

Cakephp2.0Controllerから返された文字列を解析しています。

私のオートコンプリートコードは..

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>';
    }
});

未定義よりも値、未定義よりも値のようなリストを取得しています。それはfirebugのエラーで私を終わらせます。選択すると、テキストボックスに値が入力されません。私は美しい方法で価値を求めています。それは、ul、liでリストを表示しているDivです...

私のコントローラーコードは..

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"}]

最後に、入力しても返されません。つまり、私はシャネルを持っており、フォーマットされていない、定義されていないよりも入力した場合、キーアップを続行することはありません。それは一定のままです。

4

1 に答える 1

0

あなたのデータ形式は間違っていると思います。およびプロパティは同じオブジェクト内にある必要がありますidlabelオブジェクトの半分にはプロパティがないため、オブジェクト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"},...]
于 2012-04-24T11:25:34.440 に答える