在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请求中获得结果?
答案 0 :(得分:2)
这就是我之前使用jQueryUI的自动完成和ZF的方式......
制作行动
public function ajaxautocompleteAction()
{
$term = $this->getRequest()->getParam('term');
$categoryObj = new Categories();
$result = $categoryObj->searchCategory($term);
$this->view->result = $result;
}
向您的操作添加AjaxContext,禁用自动JSON序列化。我正在跳过自动序列化,因为你的模型代表通常的“标签”/“值”对jQueryUI的automcomplete查找
并不常见public function init()
{
$this->_helper->ajaxContext->addActionContext('ajaxautocomplete', 'json')
->setAutoJsonSerialization(false)
->initContext('json');
}
创建您的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);
将自动填充操作的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
});
答案 1 :(得分:-1)
看起来像domain.com不允许跨域调用。
尝试chrome.exe --disable-web-security