我正在使用CakePHP 2.3.7。
我的控制器中有一个通过ajax调用的方法,该方法未成功从会话中检索数据。我正在做以下事情。
我有一个从ajax调用注入DOM的地址表单。用户使用无效数据提交表单。我从Address模型中获取错误和值并请求数据并写入Session,如下所示:
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触发时,表单呈现,但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 :(得分:0)
我解决了这个问题,这是我代码中的其他问题。我有另一个ajax请求,它计算并将订单上的送货量返回给DOM。在该方法中,我正在删除我的地址会话,因此表单不会有任何延迟数据。对于第一次到达表单的人来说,这可能是一个好主意,但是在无效数据之后重新加载表单时也会发生这种情况。虽然我的问题在我的情况下是独一无二的,但希望我上面的代码可以帮助其他人。