2015-04-28 87 views
1

我想在我的ZF2項目中使用AJAX和JQuery。確切地說,我想在超出選擇值更改時更改選擇選項。在Zend Framework中使用AJAX 2

爲此,我嘗試實現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

'new Zend_Date()'它來自ZF1在ZF2中沒有日期庫 –

+0

是您對ZF1或ZF2的問題? – blackbishop

+0

這與此相同:$ chaine =「toto」; \t \t $ this - > _ helper-> json($ chaine); – Tom59

回答

2

如果我正確理解你的問題,你需要根據另一個值的變化更新一個選擇值。因此,只需將onchange函數綁定到選擇哪個更改上,獲取選定的值並通過ajax將其發送到您的控制器操作,以便您可以獲取新值並更新第二個選擇。

她的是一個解決方案,你可以在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('changedValue'); 
    // your logic here.... 

    $date = date('Y-m-d'); // get the current date 
    $data = new JsonModel(array(
      'currentdate' => $date, 
    )); 
    return $data; 
} 

你也需要在你的module.config.php使ViewJsonStrategy

'view_manager' => array(
     //............. 

     'strategies' => array(
      'ViewJsonStrategy', 
     ), 
), 
+0

我有一個錯誤部分的結果,不成功的部分ajax代碼。在jqXHR.responseText中,我有一個html頁面。我的網站索引的html頁面:http://www.example.com。感謝您的幫助 – Tom59

+1

檢查控制檯登錄您的瀏覽器的錯誤 – blackbishop

+0

textStatus:parsererror errorThrown:意外的令牌< – Tom59