我想在我的ZF2项目中使用AJAX和Jquery。确切地说,我想在选择值过高时更改选择选项。
为此,我尝试实现AJAX方法。我没有在互联网上找到一个关于我的问题的好教程,但我尝试用不同的来源做这个。这是我的代码:
控制器:
public function init()
{
parent::init();
$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch ->addActionContext('getcurrenttime', 'json')->initContext();
}
public function getcurrenttimeAction()
{
$date = new Zend_Date();
$chaine = $date->toString();
$this->_helper->json($chaine);
}
这是我的路线配置:
'administratif_personnel' => array(
'type' => 'Literal',
'priority' => 1000,
'options' => array(
'route' => '/administratif/personnel',
'defaults' => array(
'controller' => 'Administratif\Controller\Personnel',
'action' => 'liste',
),
),
'may_terminate' => true,
'child_routes' => array(
[...]
'getcurrenttime' => array(
'type' => 'Literal',
'options' => array(
'route' => '/getcurrenttime',
'defaults' => array(
'controller' => 'Administratif\Controller\Personnel',
'action' => 'getcurrenttime',
),
),
),
),
),
这是我在视图中的Jquery代码(取决于同一个控制器)我尝试做两种不同的方法:
<script type="text/javascript">
/*
* Initialisation de Jquery
*/
$().ready(function() {
getCurrentTime();
});
function getCurrentTime() {
$.post("/administratif/personnel/getcurrenttime",{"format":"json"}, function(resp){
alert("test");
alert(resp);
},"json");
$.ajax({
url: "/administratif/personnel/getcurrenttime",
}).done(function(t) {
console.debug(t);
console.debug("test");
});
}
$.post
无效的第一种方法。我没有任何回报。但是$.ajax
给我一个html页面。 console.debug(t)
发送给我<html><head>....</head></html>
。我网站的一页。
谢谢!
答案 0 :(得分:3)
如果我正确理解了您的问题,则需要根据其他值的更改来更新选择值。因此,只需将onchange函数绑定到更改的选项,获取所选值并通过AJAX将其发送到Controller操作,以便您可以获取新值并更新第二个选择。
她是一个可以在ZF2中使用的解决方案:
<强> JS:强>
$.ajax({
type : 'POST',
url : '/administratif/personnel/getcurrenttime',
data : {value: changedValue},
dataType: 'json',
success: function(data){
//success function
//current date is in data.currentdate
},
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);
},
}) ;
<强>控制器:强>
public function getcurrenttimeAction()
{
//get the dependent value sent via ajax
$value = $this->getRequest()->getPost('value');
// your logic here....
$date = date('Y-m-d'); // get the current date
$data = new JsonModel(array(
'currentdate' => $date,
));
return $data;
}
您还需要在ViewJsonStrategy
中启用module.config.php
:
'view_manager' => array(
//.............
'strategies' => array(
'ViewJsonStrategy',
),
),