JQuery Автозаполнение JSON в CakePHP - PullRequest
1 голос
/ 17 августа 2011

Я пытаюсь сделать JQuery AutoComplete JSON-данные с помощью CakePHP.Мой код на самом деле работает.Он показывает автодополнение, как и ожидалось, но не работает:

  1. выбранный элемент не отображается в окне поиска после его выбора (пусто).
  2. the 'Нет результата'не отображается, если данные не существуют.

Вот код:

// поисковое действие моего контроллера клиента

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

// my search.ctp

<?php

if(!empty($customers)) {

    $data = array();

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

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

?>

// my js file

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

Пожалуйста, помогите мне изменитькод.Спасибо!

1 Ответ

0 голосов
/ 18 августа 2011

Прежде всего, используемый вами плагин устарел в пользу jQueryUI , и я бы настоятельно рекомендовал использовать его вместо этого (лучшая поддержка со стороны сообщества, обновления и т. Д.).Однако, если по какой-то причине вам нужно использовать этот плагин, вот ваши проблемы:

  1. Это плохо документировано (если оно вообще задокументировано), но выглядит как parse функция должна возвращать объект со свойством result, которое вставляется в элемент input.Так что вам просто нужно изменить свою функцию разбора, чтобы добавить это свойство:

    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, я с удовольствием предоставлю его.

...