jQuery автозаполнение mysql zend нет ответа от действия / контроллера? - PullRequest
1 голос
/ 12 октября 2011

Использовали 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?

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Вот как я использовал автозаполнение и ZF jQueryUI раньше ...

  1. Создайте свое действие

    public function ajaxautocompleteAction()
    {
        $term = $this->getRequest()->getParam('term');
        $categoryObj = new Categories();
        $result = $categoryObj->searchCategory($term);
        $this->view->result = $result;
    }
    
  2. ДобавитьAjaxContext для вашего действия, отключив автоматическую сериализацию JSON.Я пропускаю автоматическую сериализацию, поскольку в ваших моделях не принято представлять обычные пары "метка" / "значение". Функция автозаполнения jQueryUI ищет

    public function init()
    {
        $this->_helper->ajaxContext->addActionContext('ajaxautocomplete', 'json')
                                   ->setAutoJsonSerialization(false)
                                   ->initContext('json');
    }
    
  3. Создайте представление JSON (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);
    
  4. Добавьте URL-адрес вашего действия автозаполнения в качестве переменной JavaScript в представление, которое должно его использовать (при условии, что вы используете помощник HeadScript в макете)

    $this->headScript()->prependScript(sprintf('var searchUrl = "%s";',
        $this->url(array(
            'action'     => 'ajaxautocomplete',
            'controller' => 'account'
        ), null, true)));
    
  5. Настройте свой JavaScript следующим образом

    $("#autotest").autocomplete({
        source: searchUrl,
        minLength: 2
    });
    
0 голосов
/ 12 октября 2011

похоже, что domain.com не разрешает междоменные вызовы.

Попробуйте chrome.exe --disable-web-security

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...