0

CakePHP 2.3.7 を使用しています。

セッションからデータを正常に取得していないコントローラーで ajax を介して呼び出されるメソッドがあります。私は次のことをしています。

ajax 呼び出しから DOM に挿入されるアドレス フォームがあります。ユーザーが無効なデータを含むフォームを送信しました。Address モデルからエラーと値を取得し、データを要求して、次のようにセッションに書き込みます。

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 呼び出しのセッションでデータがまだ失われています。

私はロープの終わりにいます!提案をいただければ幸いです。

4

1 に答える 1

0

私はこれを解決しました。それは私のコードの他の場所の問題でした。注文の送料を計算して DOM に返す別の ajax リクエストがあります。そのメソッド内で、アドレス セッションを削除していたので、フォームにデータが残っていません。これは最初にフォームに到達した人にとっては良い考えだったかもしれませんが、無効なデータの後にフォームがリロードされたときにも発生していました. 私の問題は私の状況に固有のものでしたが、上記のコードが他の人に役立つことを願っています.

于 2013-07-14T19:39:56.560 に答える