2013-07-14 2 views
0

Я использую CakePHP 2.3.7.CakePHP Метод Ajax Не получение данных сеанса

У меня есть метод, вызванный через ajax в моем контроллере, который не удается извлечь данные из сеанса. Я делаю следующее.

У меня есть форма адреса, которая вводится в DOM из вызова ajax. Пользователь отправляет форму с недопустимыми данными. Я получаю ошибки и значение из модели и запроса данных адресов и записи на сессию следующим образом:

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({ 
    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, форма отображает, но сеанс пуст, а мои ошибки и значения больше недоступны. Он немного смутился, потому что он не всегда повторяем. Несколько раз мои данные доходят до представления, иногда это не так. Я играл с моими настройками Session немного, вот как они выглядят:

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. В рамках этого метода я удалял сеанс моего адреса, чтобы форма не содержала каких-либо затяжных данных. Возможно, это была хорошая идея для человека, который впервые достиг формы, но это также происходило, когда форма перезагружалась после недопустимых данных. Хотя моя проблема была уникальной для моей ситуации, надеюсь, мой код выше поможет другим.