0

我正在使用 CakePHP 2.3.7。

我在我的控制器中有一个通过 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
    }
});

控制器中的获取地址:

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 是空的,我的错误和值不再可用。它变得有点令人抓狂,因为它不能始终如一地重复。有时我的数据会显示在视图中,有时则不会。我已经玩过我的 Session 设置了,下面是它们的样子:

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

我添加了参数

'session.cookie_httponly' => false

并且在我的开发环境中取得了一点成功,但是在生产上,ajax调用上的Session数据还是丢失了。

我已经走到了尽头!建议表示赞赏。

4

1 回答 1

0

我解决了这个问题,这是我代码中其他地方的问题。我有另一个 ajax 请求,它计算订单的运费并将其返回给 DOM。在该方法中,我删除了我的地址会话,因此表单不会有任何挥之不去的数据。对于第一次访问表单的人来说,这可能是一个好主意,但是当表单在无效数据后重新加载时也会发生这种情况。虽然我的问题对我的情况来说是独一无二的,但希望我上面的代码能帮助其他人。

于 2013-07-14T19:39:56.560 回答