我有一个Zend Framework 2表单,并尝试创建一个可靠的Dropdown。所以在选择Maincategory
之后,我使用AJAX跳转到我的Controller加载子类别并通过JSON返回它们。我已经有了ZF1的解决方案,但是使用ZF2我不断发现错误404 。
我尝试在广告控制器中调用属于广告模型的操作loadsubcategory
。对于我的所有页面,我都有路线。我真的很困惑,现在我的理解是我留在页面本身,所以在我看来我不需要AJAX请求的路由。我的网址目前为http://myproject.local/create/advert
,此处为我的ajax电话:
$.ajax({
url: '/advert/loadsubcategory/',
data: { id: categoryID},
为什么我会得到404?
答案 0 :(得分:1)
如果您未找到错误404 ,则控制器或您正在呼叫的操作不存在。
首先:看起来您在Ajax请求中使用的网址是错误的。 它应该是:
url : '/advert/loadsubcategory',
而不是:
url : '/advert/loadsubcategory/'
它不应该是网址末尾的/
。
第二:为了避免网址中出现任何错误,您可以在Zend视图中获得确切网址
文件,然后将其作为参数传递给dependentDropDown
函数,如下所示:
<script type="text/javascript">
$(document).ready(function() {
var ajax_url = "<?= $this->url($this->route, array('controller'=>'advert', 'action'=>'loadsubcategory'));?>";
dependentDropDown(source_id, target_id, ajax_url);
});
</script>
假设您有dependentDropDown
函数,如下所示:
dependentDropDown = function(source,target,url){
$('#'+source).change(function() {
$.ajax({
type: 'POST',
async: true,
url: url,
cache: true,
dataType: 'json',
data: {id: $('#'+source).val() },
success: function(data){
//success function, populating the target with data
},
error: function(jqXHR,textStatus,errorThrown){
var error = $.parseJSON(jqXHR.responseText);
var content = error.content;
console.log(content.message);
if(content.display_exceptions)
console.log(content.exception.xdebug_message);
},
});
});
}
在AdvertController
:
public function loadsubcategoryAction(){
$request = $this->getRequest();
if ($request->isPost())
{
$categoryID= $request->getPost('id', null);
$data = new JsonModel(array(
'success' => true,
'results' =>$subcategories, //<---- your data to return
));
return $data;
}
}
希望这可以提供帮助。
答案 1 :(得分:0)
在搜索解决方案2天后,我发现我必须为AJAX请求创建路由。请参阅下面的更新路线。我不确定这是否是最佳解决方案,但似乎有效。
'advertform' => array(
'type' => 'Literal',
'options' => array(
'route' => '/create/advert',
'defaults' => array(
// Change this value to reflect the namespace in which
// the controllers for your module are found
'__NAMESPACE__' => 'Advert\Controller',
'controller' => 'Advert',
'action' => 'create',
),
),
'may_terminate' => true,
'child_routes' => array(
'profile' => array(
'type' => 'Segment',
'options' => array(
'route' => '/loadsubcategory[/:id]',
'defaults' => array(
'action' => 'loadsubcategory',
),
'constraints' => array(
'id' => '[0-9]*'
),
),
),
),
),