我的视图页面中有一个简单的ajax请求,我想绑定到我的控制器中的一个动作:
function updateDates(id,val){
$.ajax({
type: "POST",
url: "<?=APPLICATION_URL_ADMIN?>campaign/changedate",
data: ({id:id,duree:val}),
cache: false,
error: function(msg){
alert('Il y a eu une erreur.');
},
success: function(){
console.log('ok');
window.location.href=window.location.href;
}
});
}
并在我的控制器中:
public function changedateAction()
{
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContext('changedate', 'html')->initContext();
global $mySession;
$db = new Db();
$data = $this->_request->getPost();
$data_update['campaign_length'] = $data['duree'];
$data_update['launch_date'] = date("Y-m-d H:i:s");
$condition = "campaign_id='" . $data['id'] . "' ";
$db->modify(LAUNCHCAMPAIGN, $data_update, $condition);
}
这是在chrome控制台中呈现的请求字符串,这很好: http://www.mydomain.ndd/admin/campaign/changedate?id=4&duree=45
它抛出错误500,我不知道为什么。任何人都可以帮助我吗?
编辑:
我在控制器中更改了操作,但我的数据库仍未更新
public function changedateAction()
{
global $mySession;
$db = new Db();
if ($this->getRequest()->isXmlHttpRequest()) {
// makes disable renderer
$this->_helper->viewRenderer->setNoRender();
//makes disable layout
$this->_helper->getHelper('layout')->disableLayout();
if ($this->getRequest()->isPost()){
$data = $this->_request->getPost();
$data_update['campaign_length'] = $data['duree'];
$data_update['launch_date'] = date("Y-m-d H:i:s");
$condition = "campaign_id='" . $data['id'] . "' ";
$db->modify(LAUNCHCAMPAIGN, $data_update, $condition);
$this->view->text = $data['duree'];.' processed';
}
}
}
有人能帮助我吗?我被卡住了。
由于
答案 0 :(得分:1)
您的控制器通过以下方式从 POST 填充$data
$data = $this->_request->getPost();
但您的请求会在查询字符串中通过 GET 传递id
和duree
值:
http://www.mydomain.ndd/admin/campaign/changedate?id=4&duree=45
结果是,当您尝试使用$data['id']
和$data['duree']
构建$data_update
时,$data
和$request = $this->getRequest();
$id = $request->getParam('id');
$duree = $request()->getParam('duree');
未定义。
id
的var_dump / die应确认这些键未设置。
相反,请尝试使用以下方法提取查询字符串数据:
duree
没有经过测试,只是一个想法...
<强>更新强>
您的说明中的请求方法存在一些不一致之处。当然,您描述的AJAX请求是POST,您似乎正在正确传递array_filter
和array_filter($array)
密钥。我的回答集中在你对网址的引用上:
http://www.mydomain.ndd/admin/campaign/changedate?id=4&duree=45
显然通过GET传递数据。
答案 1 :(得分:0)
你在Controller端的逻辑看起来很好。
假设您尝试阅读的控制器被称为&#34;广告系列&#34; ,请尝试以下方法:
function updateDates(id,val){
$.ajax({
type: "POST",
// DUE TO THE NATURE OF HOW ZEND WORKS YOU NEED ONLY NEED TO PROVIDE /CONTROLLER/ACTION
url: "/campaign/changedate",
// I USE THIS DATA TYPE WHEN SENDING AJAX REQUESTS IN ZEND
dataType: 'json',
// YOU DO NOT NEED THE () ONLY {}
data: {
id:id,
duree:val
},
cache: false,
error: function(msg){
alert('Il y a eu une erreur.');
},
success: function(){
console.log('ok');
// IF YOU TRYING TO RELOAD THE CURRENT PAGE USE THIS
location.reload();
}
});
}
在您的操作结束时添加此内容,以便它返回到您的ajax请求;
echo Zend_Json_Encoder::encode(array(
'success' => true
));
exit;