AJAX内でのリダイレクト処理の罠
こんばんは。笹亀です。
iPhoneの白をず〜〜っと待っているのですが、
今年末ということになってとても残念でなりません。
ここまで待ったので気長に待つことにします。
さて今日はAJAX内でのリダイレクト処理をした際に、
起こったことをご紹介させていただきます。
結論から言うと、
「AJAX内でリダイレクトするときはセッションは使うな!」
まずは遷移として下記のように試しました。
AJAXでSymfonyをfile_get_contentsで呼び出すスクリプトを指定します。
まずは表示する側のページを作成します。
-- info.php
次にAJAXの呼び出し側のPHPスクリプトを作成します。
-- get.php
get.phpで呼び出しているSymfony側の処理を実装します。
上記のように実装完了後に実際に動かしてみます。
テスト開始ボタンをクリック・・
うあ、やっぱり取得できません。
普通にSymfony側を実行すれば、セッションデータの取得はおこなえます。
普通にAJAXで処理するときには、ご紹介させていただいたようなリダレクトして処理を遷移させて使うみたいなことはそうそうないことだとおもいます。
今回はイレギュラー的にどうしてもセッションを使ってリダイレクトすることになってしまいました。なぜだといろいろと試行したため時間を使いました。先入観で出来るだろうと思って使うと痛い目にあいますというか痛い目にあいました。
教訓としてはこんな遠まわしな使い方をするなということと先入観で使用するなでした^^;
皆さんもAJAX使うときには気をつけてくださいませ。
iPhoneの白をず〜〜っと待っているのですが、
今年末ということになってとても残念でなりません。
ここまで待ったので気長に待つことにします。
さて今日はAJAX内でのリダイレクト処理をした際に、
起こったことをご紹介させていただきます。
結論から言うと、
「AJAX内でリダイレクトするときはセッションは使うな!」
まずは遷移として下記のように試しました。
AJAXでSymfonyをfile_get_contentsで呼び出すスクリプトを指定します。
- info.php
↓AJAXで呼び出し - get.php(外部のSymfonyで作成されたページの呼び出し)
↓file_get_contents関数で呼び出し - http://sasa.local/top/sessionTest
↓(Symfony内でリダイレクト - http://sasa.local/top/sessionTest1
- ※Symfonyのリダイレクト(redirect)を使用してセッションのデータを書き込んで値を引き継ぐことができるのかを試しました。
まずは表示する側のページを作成します。
-- info.php
- <!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html
xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> - <head>
- <meta
http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <meta
http-equiv="Content-Style-Type" content="text/css" /> - <meta
http-equiv="Content-Script-Type" content="text/javascript" /> - <title>symfony&ajax
session Test</title> - <script
language="JavaScript" type="text/javascript" src="/jquery.js"></script> - <!--
EXPAND SKIPED --> - <script
type="text/javascript"> - <!--
- function
ajax_test() { $.ajax( { type : "POST", url : "get.php", data : {param : "sasagame hiroshi"}, success : function(txt) { $('#view_area').html(txt); }, error : function() { alert('error'); } }); - }
- //
--> - </script>
- </head>
- <body>
- symfonyとセッションのテスト中<br
/> - <input
type="button" name="test" onClick="ajax_test();return false;" value="テスト開始"> - <div
id="view_area"> - </div>
- </body>
- </html>
次にAJAXの呼び出し側のPHPスクリプトを作成します。
-- get.php
$html = file_get_contents('http://sasa.local/top/sessionTest?param=sasagame+hiroshi'); echo $html;
get.phpで呼び出しているSymfony側の処理を実装します。
- ・・・省略
public function executeSessionTest(sfWebRequest $request) { $param = $request->getParameter('param'); $this->getUser()->setAttribute('session_test', $param); $this->redirect('top/sessionTest1'); } public function executeSessionTest1(sfWebRequest $request) { $param = $request->getParameter('param'); $session_data = $this->getUser()->getAttribute('session_test', '取得できない'); echo 'session_test_data:' . $session_data . "<br />"; echo print_r($_SESSION, true); exit; } - ・・・省略
上記のように実装完了後に実際に動かしてみます。
テスト開始ボタンをクリック・・
うあ、やっぱり取得できません。
普通にSymfony側を実行すれば、セッションデータの取得はおこなえます。
普通にAJAXで処理するときには、ご紹介させていただいたようなリダレクトして処理を遷移させて使うみたいなことはそうそうないことだとおもいます。
今回はイレギュラー的にどうしてもセッションを使ってリダイレクトすることになってしまいました。なぜだといろいろと試行したため時間を使いました。先入観で出来るだろうと思って使うと痛い目にあいますというか痛い目にあいました。
教訓としてはこんな遠まわしな使い方をするなということと先入観で使用するなでした^^;
皆さんもAJAX使うときには気をつけてくださいませ。
コメント
コメントフォーム
トラックバックURI
最近の記事
システム開発エンジニア募集! [2012年02月03日 : 小林有佳]
OpenVPNで細々便利な設定 [2012年01月31日 : 門脇優児]
【iOS】Viewの開発・デバッグに役立つ色々 [2012年01月23日 : 中川善樹]
PHPDocumentorの利用方法まとめ [2012年01月19日 : 笹亀弘]
Google Chart Toolsを使ってサイトマップを描こう! [2011年12月21日 : 志田仁美]
stumpwm設定v2 [2011年12月19日 : 門脇優児]
Mashup Awards 7の授賞式が行われました [2011年12月16日 : 中川善樹]
社員旅行に行きました [2011年12月12日 : 大橋寛子]
iCloud風のアイコンを作成する(Fireworks) [2011年12月07日 : 和田記光]
iScroll4でネイティブに近いスマホ向けHTMLページを作成する [2011年12月02日 : 松田惇]













ご指摘とおりだと思います。
よぉーく考えれば答えはでてきたのですが、
お恥ずかしながら、はまりました。。