Я пытаюсь заставить 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
, а мой код не работает, что не так?
ИЗМЕНИТЬ Демо-версия находится здесь