jQuery autocomplete mysql zend没有来自action / controller的响应?

时间:2011-10-12 17:08:47

标签: jquery jquery-ui zend-framework jquery-autocomplete

在zend中使用jquery自动完成并设置我们的动作

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。 Access-Control-Allow-Origin不允许原点http://domain.com

为什么没有从ajax请求中获得结果?

2 个答案:

答案 0 :(得分:2)

这就是我之前使用jQueryUI的自动完成和ZF的方式......

  1. 制作行动

    public function ajaxautocompleteAction()
    {
        $term = $this->getRequest()->getParam('term');
        $categoryObj = new Categories();
        $result = $categoryObj->searchCategory($term);
        $this->view->result = $result;
    }
    
  2. 向您的操作添加AjaxContext,禁用自动JSON序列化。我正在跳过自动序列化,因为你的模型代表通常的“标签”/“值”对jQueryUI的automcomplete查找

    并不常见
    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
    });
    

答案 1 :(得分:-1)

看起来像domain.com不允许跨域调用。

尝试chrome.exe --disable-web-security