2011-08-17 70 views
1

我正在嘗試使用CakePHP製作jQuery自動完成JSON數據。我的代碼實際上工作。它按預期顯示自動完成,但失敗:CakePHP中的jQuery自動完成JSON

  1. 一旦我們選擇它(空白),所選項目不會顯示在搜索框中。
  2. 如果數據不存在,'沒有結果'不顯示。

下面的代碼:我的客戶控制器

function search(){ 

    $this->Customer->recursive = -1; 

    $customers = $this->Customer->find('all', array(
     'conditions'=>array('Customer.nama LIKE'=>$this->params['url']['q'].'%'), 
     'fields'=>array('id', 'name', 'telp', 'address')) 
    ); 

    $this->set('customers', $customers); 

    Configure::write('debug', 0); 
    $this->layout = 'ajax';    
} 

// 我search.ctp

<?php 

if(!empty($customers)) { 

    $data = array(); 

    foreach ($customers as $customer){ 
     $data[] = $customer['Customer']; 
    } 

    echo json_encode($data); 
} 
else echo 'No result'; 

?> 

//

// 搜索我的行動js文件

$().ready(function() { 

    $("#search-txtbox").autocomplete("/customers/search", 
     { 
      parse: function(data){ 
       var parsed = []; 
       for (var i=0; i < data.length; i++) { 
        parsed[i] = { 
         data: data[i], 
         value: data[i].name //the search item 
        }; 
       } 
       return parsed; 
      }, 
      formatItem: function (row, i, max) { 
       var str = row.name + ' (Telp: '+ row.telp +')' + '<br />'; 
       str += row.address; 
       return str;      
      }, 
      formatResult: function (row) { 
       return row.name; 
      }, 
      minChars: 2, 
      max: 0, 
      width: 224, 
      scrollHeight: 420, 
      dataType: 'json' 
     } 
    ); 
}); 

請幫我修改代碼。謝謝!

回答

0

首先,您使用的插件已被棄用,並支持jQueryUI,我強烈建議您使用它(更好的社區支持,更新等)。但是,如果由於某種原因,你必須使用該插件,這裏是你的問題:

  1. 這是記錄不完整(如果在所有的記錄),但它看起來像parse函數必須返回一個對象被插入到input元素中的result屬性。所以,你應該只需要修改你解析函數以添加屬性:

    parse: function(data){ 
        var parsed = []; 
        for (var i=0; i < data.length; i++) { 
         parsed[i] = { 
          data: data[i], 
          value: data[i].name, //the search item 
          result: data[i].result 
         }; 
        } 
        return parsed; 
    }, 
    
  2. 我不知道,你要「無結果」顯示出來,但你可以稍微修改你的PHP代碼顯示parse函數內部消息:

    PHP

    $data = array(); 
    
    foreach ($customers as $customer){ 
        $data[] = $customer['Customer']; 
    } 
    
    echo json_encode($data); 
    

    的JavaScript

    parse: function(data){ 
        var parsed = []; 
        for (var i=0; i < data.length; i++) { 
         parsed[i] = { 
          data: data[i], 
          value: data[i].name, //the search item 
          result: data[i].name 
         }; 
        } 
        if (!parsed.length) { // <-- Do something with the "No Results" message. 
         $("body").append("no results"); 
        } 
        return parsed; 
    }, 
    

對不起,我不能提供一個工作的例子。如果你想使用jQueryUI小部件的例子,我很樂意提供一個。