Запрос Typeahead и AJAX не работает

Я пытаюсь заставить TB Typeahead работать с результатами AJAX и PHP, но не могу. Смотрите, это код, который я сделал для этого:

$('#search').typeahead({
    limit: 10,
    minLength: 2,
    source: function() {
        return $.ajax({
            url: $('base').attr('href') + 'index.php?route=product/search/AjaxProductSearch',
            type: "GET",
            data: "search=" + $("#search").val(),
            success: function(result) {
                return result;
            }
        });
    }
});

Результат вызова, например, с помощью «co»:

["Combo AMD A4 (14,708.06 BsF)","Combo AMD A8 (17,900.05 BsF)","Combo
Core i3 (17,200.01 BsF)","Combo Core i5 (20,399.95 BsF)","Combo Intel
G465 (13,699.99 BsF)","Combo Intel G630 (15,199.97 BsF)"]

Но варианты не отображаются, почему? Что случилось? Также можно добавить какой-то способ щелкнуть в параметрах и перейти к определенному URL-адресу?

Я также проверяю этот пост и другое тоже и, наконец, это другое но безрезультатно

EDIT Благодаря замечательной помощи @dikirill я частично заработал этот код:

$('#search').typeahead({
    limit: 10,
    minLength: 2,
    source: function(query, process) {
        $.ajax({
            url: $('base').attr('href') + 'index.php?route=product/search/AjaxProductSearch',
            type: "GET",
            data: "search=" + $("#search").val(),
            success: function(result) {
                return process(result.names);
            },
            dataType: 'json'
        });
    },
    updater: function(item) {
        var values = $('#search').data('values');
        alert(values);
        for (var index in values) {
            if (values[index].name == item) {
                location.href = values[index].href;
                break;
            }
        }
        return item;
    }
});

Что не работает? Ну, я хочу, чтобы, когда я щелкаю любой элемент из результата typeahead, я мгновенно перенаправлялся на URL-адрес, связанный с этим элементом. См. эту функцию PHP, которая возвращает значения:

public function AjaxProductSearch() {
    $this->load->model('catalog/product');

    if (isset($this->request->get['search'])) {
        $search = $this->request->get['search'];
    } else {
        $search = '';
    }

    $output = array();
    if (isset($this->request->get['search'])) {
        $data = array(
            'filter_name' => $search
        );

        $product_total = $this->model_catalog_product->getTotalProducts($data);
        $results = $this->model_catalog_product->getProducts($data);

        $output = array();
        foreach ($results as $result) {
            $output['names'][] = $result['name'];
            $output['values'][] = array(
                'name' => $result['name'],
                'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'] . $url)
            );
        }
    }
    echo json_encode($output);
}

Затем возвращается один результат, например, этот:

{"names":["Combo AMD A4","Combo AMD A8","Combo Core i3","Combo Core i5","Combo Intel G465","Combo Intel G630"],"values":[{"name":"Combo AMD A4","href":"http:\/\/store.devserver\/amd-a4"},{"name":"Combo AMD A8","href":"http:\/\/store.devserver\/amd-a8"},{"name":"Combo Core i3","href":"http:\/\/store.devserver\/intel-corei3"},{"name":"Combo Core i5","href":"http:\/\/store.devserver\/intel-corei5"},{"name":"Combo Intel G465","href":"http:\/\/store.devserver\/intel-g465"},{"name":"Combo Intel G630","href":"http:\/\/store.devserver\/intel-g630"}]}

Как вы можете видеть, у меня есть имена, которые позволяют мне создавать тип, как и должно быть, а другие значения — это то место, где я получаю имена, связанные с href. Другими словами, если я выберу Combo AMD A4, то я должен перенаправить на href":"http:\/\/store.devserver\/amd-a4, а мой код не работает, что не так?

ИЗМЕНИТЬ Демо-версия находится здесь


person Reynier    schedule 17.04.2013    source источник


Ответы (1)


Попробуйте мой пример:

$('#search').typeahead({
    limit: 10,
    minLength: 2,
    source:function (query, process)
        $.ajax({
            url: $('base').attr('href') + 'index.php?route=product/search/AjaxProductSearch',
            type: "GET",
            data: "search=" + $("#search").val(),
            success: function(result) {
                if (typeof result.values != "undefined") {
                    $('#search').data('values', result.values);
                    return process(result.names);
                }
            },
            dataType: 'json'
        });
    },
    updater: function(item) {
        var values = $('#search').data('values');
        for (var index in values) {
            if (values[index].name == item) {
                location.href = values[index].href;
                break;
            }
        }
       return item;
    }
});

Закончилось отсутствием 'dataType'.

person dikirill    schedule 17.04.2013
comment
Я не знаю, что происходит :-(, например, у вас есть $.get(sourceUrl) это $('base').attr('href') + 'index.php?route=product/search/AjaxProductSearch' в моем коде? также вы говорите term:query это значение, которое я ищу, например $("#search").val()? пример с варами из моего кода - person Reynier; 17.04.2013
comment
@dirikill nop, не работает, параметры (означает раскрывающийся список) никогда не отображаются, даже когда ваш код возвращает JSON со значениями - person Reynier; 17.04.2013
comment
Попробуйте удалить return перед $.ajax. - person dikirill; 17.04.2013
comment
тот же результат, параметры не отображаются, я пытаюсь загрузить сайт на свой хостинг, но он сейчас не работает, мне нужно подождать, пока снова не встанет - person Reynier; 17.04.2013
comment
Я отредактировал свой вопрос и добавил, что мы работали, но updater не работает, можете взглянуть? - person Reynier; 18.04.2013
comment
Замените свой «источник» «успех» на этот код: успех: функция (результат) { if (typeof result.values ​​!= undefined) { $('#search').data('values', result.values); процесс возврата (result.names); } } - person dikirill; 18.04.2013
comment
Я снова теряюсь, вы имеете в виду добавить success к typeahead или вы имеете в виду что-то изменить в существующем коде? - person Reynier; 18.04.2013
comment
@dikirll отличный человек, это работает как шарм, большое, большое спасибо за вас и за ваши усилия, я узнаю что-то новое - person Reynier; 18.04.2013