Использовали jquery autocomplete в Zend и настроили наше действие следующим образом
public function ajaxautocompleteAction() { $postData = $this->_request->getParams(); $term = $postData['term']; $categoryObj = new Categories(); $result = $categoryObj->searchCategory($term); $this->view->result = $result; }
Javascript в файле просмотра это
$(function() { var url = "http://www.domain.com/account/ajaxautocomplete?format=json"; $( "#autotest" ).autocomplete({ minLength: 2, source: function(request, response){ var iterm = request.term; var url = "http://www.domain.com/account/ajaxautocomplete?format=json"; $.post( url, {term: iterm}, function( data ) { response(data); }); } }); });
В консоли Chrome я получаю эту ошибку
XMLHttpRequest не может загрузить http://www.domain.com/account/ajaxautocomplete?format=json. Источник http://domain.com не разрешен Access-Control-Allow-Origin.
Любые идеи, почему не были получены результаты от запроса ajax?
Вот как я использовал автозаполнение и ZF jQueryUI раньше ...
Создайте свое действие
public function ajaxautocompleteAction() { $term = $this->getRequest()->getParam('term'); $categoryObj = new Categories(); $result = $categoryObj->searchCategory($term); $this->view->result = $result; }
ДобавитьAjaxContext для вашего действия, отключив автоматическую сериализацию JSON.Я пропускаю автоматическую сериализацию, поскольку в ваших моделях не принято представлять обычные пары "метка" / "значение". Функция автозаполнения jQueryUI ищет
public function init() { $this->_helper->ajaxContext->addActionContext('ajaxautocomplete', 'json') ->setAutoJsonSerialization(false) ->initContext('json'); }
Создайте представление JSON (views/scripts/account/ajaxautocomplete.json.phtml)
views/scripts/account/ajaxautocomplete.json.phtml
<?php $data = array(); foreach ($this->results as $category) { // format each result for jQueryUI autocomplete $data[] = array( 'label' => $category->getName(), 'value' => $category->getName() ); } echo Zend_Json::encode($data);
Добавьте URL-адрес вашего действия автозаполнения в качестве переменной JavaScript в представление, которое должно его использовать (при условии, что вы используете помощник HeadScript в макете)
$this->headScript()->prependScript(sprintf('var searchUrl = "%s";', $this->url(array( 'action' => 'ajaxautocomplete', 'controller' => 'account' ), null, true)));
Настройте свой JavaScript следующим образом
$("#autotest").autocomplete({ source: searchUrl, minLength: 2 });
похоже, что domain.com не разрешает междоменные вызовы.
Попробуйте chrome.exe --disable-web-security
chrome.exe --disable-web-security