Zend Framework 1.12和ajax返回错误500

时间:2016-02-02 20:44:51

标签: ajax zend-framework

我的视图页面中有一个简单的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';
        }
     }

}

有人能帮助我吗?我被卡住了。

由于

2 个答案:

答案 0 :(得分:1)

您的控制器通过以下方式从 POST 填充$data

$data = $this->_request->getPost(); 

但您的请求会在查询字符串中通过 GET 传递idduree值:

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_filterarray_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;