Нужна помощь с автозаполнением JQuery UI - PullRequest
0 голосов
/ 27 августа 2011

Я пытаюсь заставить автозаполнение jquery ui работать с проектом codeigniter.

пока у меня есть поле ввода <input type="text" id="text1"/>

и затем в моем сценарии у меня есть

source: function(request, response) {
            $.post('autocompleteHandler', {mechanic: request.term}, function(data) {
            console.log('data.phpResp = '+data.phpResp);
            console.log('in post?');

            console.log('data = '+data.toSource);

            var realArray = $.makeArray(data);  // this line was needed to use the $.map function

            response($.map(realArray, function(item) {

                console.log('in map');

                return {
                    label: item.info,
                    value: item.info
                }

            }));


            }, 'json');
        },

В моем контроллере codeigniter у меня есть эта функция

function autocompleteHandler() {

    $input = $this->input->post('mechanic');

    $this->load->model('login_model');

    $results = $this->login_model->search_mechanic_criteria($input);

    $mechs= array();
    foreach($results as $result) {

        $mechs['info'] = $result['mechanic_name'];  

    }
}

Я не заставляю это работать. У кого-нибудь есть идеи, где я могу начать устранение неполадок? Мне действительно тяжело с документацией по jquery ui.

РЕДАКТИРОВАТЬ : Я немного изменил свой код. Вместо того, чтобы возвращать json_encode, мне нужно было повторить json_encode на стороне php. У меня все еще ничего не отображается в консоли.

2-Й РЕДАКТ. Теперь мой вопрос: как я могу вернуть несколько значений для функции автозаполнения? Если у меня есть запрос, который возвращает только одну строку, он работает нормально, но если у меня есть несколько возвращенных строк, не работает. Должно быть что-то с тем, как я возвращаю данные, но я не могу понять это.

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Я играл с jsfiddle после того, как вы упомянули toSource ().См. http://jsfiddle.net/XYMGT/. Я обнаружил, что функция map не возвращает jQuery, но новый массив.

OLD STUFF:

Я подозреваю, чтофункция $ .map возвращает не массив, а jQuery.Может быть, он сделал бы это:

            // also you could inspect the data if the server returns what you think it returns:
            console.log(data);

            // first map the array
            $.map(data, function(item) {

                console.log('in response?');


                return {
                    label: 'testing',
                    value: 'test'
                }
            })
            // ...then separately do the response part
            response(data);

Позволяет нам знать, если это имеет значение.

РЕДАКТИРОВАТЬ:

Если этот код PHP все еще используется:

function autocompleteHandler() {
  echo json_encode(array('phpResp' => 'something'));
}

Тогда console.log (data) должен показать следующее на вкладке консоли в FireBug:

{'phpResp':'somehting'}

То есть, что console.log (data.phpResp) должен что-то напечатать».Я не уверен, откуда вы берете data.toSource.

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

Я бы запустил fiddler и посмотрел бы, что там написано. Вы также можете перейти прямо на свою серверную страницу в браузере, который отображает результаты JSON. Я думаю, что автозаполнение автоматически добавляет ?term к строке. url.aspx?term=|valueofText1|

$("#text1").autocomplete({
    source: url,
    minLength: 2,
    select: function (event, ui) {
        sou = ui.item.label;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...