Я использую 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.
Я в конце своей веревки! Предложения оценены.