Попълване на моето автоматично довършване на jquery със съдържание на извикване на ajax към cakephp

Имам поле за въвеждане, което превръщам в автоматично попълване на jqueryUI:

$( "#autocomplete" ).autocomplete({
    autoFocus: true,
    source: mylist
 });

Променливата mylist е просто низ във формат на масив ['Value1','Value2,'Blah'], който първоначално просто кодирах твърдо в скрипта.

Сега искам променливата mylist да бъде резултат от ajax извикване на функция в моето приложение cakephp. Функцията е основно както следва, тя просто грабва всички данни като списък и json ги кодира.

public function source() {
    $this->layout = 'ajax';
    $countries=$this->Country->find('list',array('fields'=>'Country.country'));
    ChromePhp::log($countries);
    echo json_encode($countries);
}

Това извежда:

{"1":"Afghanistan","2":"Albania ","3":"Algeria ","5.. 

Проблемът ми е получаването на изхода на тази функция (което завършва в обратното извикване за успех на ajax като „данни“) в правилния формат за поставяне в масива с опции на автоматичното довършване.

Мога да стигна до регистрирането на всяка стойност от конзолата, но съм объркан. По принцип се хващам за сламки за правилния синтаксис.

$.ajax({
    type: "GET",
    dataType: "json",
    url: "/source/",
    success: function(data){
        /*
        magic array string creation code would go here instead of my code below...
        */
        $.each(data, function(i, item) {
            console.log(item);
        });
        console.log('data',data);


    }
})

person Chris J Allen    schedule 06.11.2012    source източник


Отговори (1)


Плъгинът за автоматично довършване може да свърши голяма част от работата вместо вас, ако му дадете нещата в правилния формат.

Бих започнал с повторно индексиране на променливата $countries, за да започне от 0. Можете да използвате функцията array_values() за това:

echo json_encode(array_values($countries));

Това трябва да ви даде JSON във формат:

['Afghanistan','Albania','Algeria',...]

След това можете да промените свойството източник в кода за автоматично довършване, за да бъде url за вашето действие източник.

$( "#autocomplete" ).autocomplete({
    autoFocus: true,
    source: "/your_controller/source"
});

Приставката за автоматично довършване няма да филтрира резултатите вместо вас, вместо това към URL адреса се добавя низ за заявка с поле term (напр. /your_controller/source?term=foo), така че трябва да промените своя find() метод, за да използвате това.

$countries = $this->Country->find('list', array(
    'fields' => 'Country.country',
    'conditions' => array(
        'Country.country LIKE' => $this->request->query['term'] . '%'
    )
));

Можете да прочетете повече за различните типове, които опцията source може да приеме в автоматичното довършване в документацията за API.

person Josh    schedule 06.11.2012
comment
Точно защо този сайт е любимият ми сайт за разработка на всички времена :) Благодаря. - person Chris J Allen; 07.11.2012