2012-04-24 20 views
0
私は、CakePHP 2.0コントローラから返された文字列を解析しています

..JSONの解析結果にエラー

私のオートコンプリートのコードが..です

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

私は未定義より価値よりも、未定義よりも、価値のようなリストを取得しています。 ファイアーバグでエラーが発生しました。値を選択すると、テキストボックスに値が入力されません。 私は美しい方法で価値を求めています。 JSON文字列を返すこと.. UL、李にリストを示す本部...

マイコントローラー・コードされている

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

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

I入力時にそのが戻らない決勝です。それは私がシャネルを持っていて、私がタイプしていてフォーマットされていないものよりも、定義されていないものが私のキーアップを続けることは決してありません。それは一定のままです。

+0

エラーとは何ですか? http://jsfiddle.net/のデモを作成できますか? –

+0

'sは定義されていません [このエラーで中断する] s = toLowerCase(); ' これはエラーです それを確認しましたjsonlint.com有効な正しい – Sankalp

+0

' json_encode'は常に有効なJSONを作成しますが、アプリケーションが渡すデータをアプリケーションが理解できるとは限りません。データはまた理解されるように構造でなければならない。 –

答えて

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"},...] 
+0

その正しいリストが生成されます。しかし、まだ2つの問題。まず、そのリストは非常に遅いです。 2番目の値を選択すると、そのテキストボックスに値が入力されません.3番目の値はdivで表示されます...すなわちul、li – Sankalp

+0

質問ごとに1つのみ質問してください。テキストボックスの値を設定することに関しては、おそらく 'autoFill'には何か関係がありますか?あなたはjQuery UIからオートコンプリートプラグインを使用しているようには見えないので、詳しい情報がなければ私たちはあなたを助けません。設計に関しては、適切な質問としてそれを定式化して例を挙げると、助けを得ることができます。それ以外の場合は、あなたの仕事をやる人を欲しがっているようです。 –

+0

他の3つの問題を手伝ってもらえますか?私は言及しています。私はあなたに投票することはできません以下の15の評判他には... – Sankalp