2013-07-14 46 views
0

我正在使用CakePHP 2.3.7。CakePHP Ajax方法不檢索會話數據

我有一個方法在我的控制器中通過ajax調用,它不能成功地從會話中檢索數據。我正在做以下事情。

我有一個從ajax調用注入DOM的地址表單。用戶使用無效數據提交表單。我得到的錯誤和值出地址模型和請求數據,並寫入會議如下:

public function index() { 
    //On form validation fail 
    $errors = $this->Address->validationErrors; 
    $data = $this->request->data; 
    $this->Session->write('Address', array('errors' => $errors, 
          'data' => $data)); 
} 

做一個全面的檢查,以確保它在會議:

var_dump($this->Session->read('Address')); 

頁現在重新加載和JS觸發此AJAX方法:

$.ajax({ 
    url: '/orders/getAddress.html', 
    data: {"country" : country, "shipping" : shippingOption}, 
    dataType: 'html', 
    cache: false, 
    success: function(data){ 
     //data is the address form html 
    } 
}); 

在的getAddress控制器:

public function getAddress() 
{ 
if($this->request->is('ajax')){ 
     //Gather up data to create html form and put into an array 
     $data = array('states' => $states, etc...); 

     //Check for errors and values in session 
     if($this->Session->check('Address') == true){ 
      $data['errors'] = $this->Session->read('Address.errors'); 
      $data['values'] = $this->Session->read('Address.data'); 
     } 
    $this->set(compact('data')); 
    $this->layout = 'ajax'; 
    } 

} 

在大多數情況下,當getAddress()通過ajax觸發時,表單會呈現,但會話是空的,我的錯誤和值不再可用。它變得有點瘋狂,因爲它不一致可重複。有時候我的數據會讓它看起來有些不一樣,有時卻不會。我打得四處我的會話設置了一下,這裏就是他們的樣子:

Configure::write('Session', array(
'defaults' => 'database', 
    'checkAgent' => false, 
    'ini', array('session.cookie_secure' => false, 'session.referer_check' => false) 
)); 

我加帕拉姆

'session.cookie_httponly' => false 

而且在我的開發環境收效甚微,但對生產,數據在ajax調用中仍然在會話中丟失。

我在我的繩子的盡頭!建議感激。

回答

0

我解決了這個問題,這是我的代碼中的其他地方的問題。我有另一個ajax請求計算並將訂單上的運輸量返回給DOM。在這種方法中,我刪除了地址會話,因此表單不會有任何延遲的數據。對於首先到達表單的人來說,這可能是一個好主意,但當表單在無效數據後重新加載時也會發生這種情況。雖然我的問題對我的情況是獨一無二的,但希望我的代碼能夠幫助其他人。