2012-04-24 161 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>'; 
    } 
}); 

我越來越喜歡名單的價值,不是undefined,比值不是undefined 。 它結束了我在螢火蟲錯誤。如果我選擇的值不在我的文本框中輸入。 我想要美麗的價值。這是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; 
} 

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

最終它沒有返回爲I型。這是我有香奈兒,如果我輸入比未格式化和undefined不會繼續我的鍵盤。它保持不變。

+0

什麼錯誤?你可以創建一個http://jsfiddle.net/演示? – 2012-04-24 11:21:52

+0

's is undefined [Break On This Error] s = s.toLowerCase(); ' 這是 經過錯誤 它jsonlint.com它驗證正確 – Sankalp 2012-04-24 11:23:35

+0

'json_encode'將始終創建有效的JSON,但這並不意味着該應用程序理解你傳遞給它的數據。數據也必須是可以理解的結構。 – 2012-04-24 11:28:19

回答

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個問題。首先是它的上市速度很慢。第二如果我選擇任何值比它沒有填寫我的文本框..第三是設計div ...即ul,李 – Sankalp 2012-04-24 11:28:33

+0

你應該只問一個問題每個問題。關於設置文本框的值,「autoFill」可能與它有關係嗎?你似乎沒有使用jQuery UI的自動完成插件,所以沒有更多的信息,我們無法幫助你。至於設計,如果你把它作爲一個適當的問題並舉例,你可能會得到一些幫助。否則,你似乎只想讓某人去做你的工作。 – 2012-04-24 11:32:10

+0

你能幫助我解決其他三個問題嗎?我已經提到過......我不能投票給你,如下所示15聲望我會... – Sankalp 2012-04-24 11:32:39