将AJAX与Zend Framework 2一起使用

时间:2015-04-28 09:38:42

标签: jquery ajax zend-framework zend-framework2

我想在我的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>。我网站的一页。

你知道吗?我认为路线有问题吗?

谢谢!

1 个答案:

答案 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',
        ),
),