2011-08-17 72 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小部件的例子,我很乐意提供一个。