新着情報のCMSを作ってます
DBに登録された内容をいったんSESSION配列に代入して編集内容に合わせSESSIONを書き直して最終的にupdateしようと考えています。
一つの記事に複数の(レイアウトを選択できるように)ブロックを設けられるように考えました。
SESSIONの内容
["articles"]=>array(8) { ["id"]=>string(1) "7" ["date"]=>string(10) "2016-12-01" ["switch"]=>int(1) ["title"]=>string(30) "title" ["image_num"]=>int(1) ["type"]=>int(2) ["timestamp"]=>string(19) "2016-12-01 09:11:31" ["blocks"]=>array(2) [0]=>array(7) ["block_id"]=>int(9) ["text"]=>string(21) "データベースに登録済みのブロック" ["layout_type"]=>int(1) ["files"]=>array(1) [0]=>array(5) ["file_id"]=>int(12) ["file_block_id"]=>int(9) ["file_name"]=> string(16) "infoimage9-1.jpg" ["file_type"]=>int(0) ["position"]=>int(1) //-------------------------以下編集でSESSIONに追加した分----------------------------------- [1]=> array(5) { ["new"]=>string(4) "true" ["block_id"]=>string(4) "new1" ["text"]=>"新しくSESSIONに追加されたブロック" ["layout_type"]=>int(3) ["files"]=>array(1) { [0]=>array(5) { ["file_id"]=>NULL ["file_block_id"]=>string(4) "new1" ["file_name"]=>NULL ["file_type"]=>int(0) ["position"]=>int(1)
「ブロック追加行程」
追加ボタンクリック→レイアウト選択→ajaxで外部phpにアクセスしてSESSIONに追加→ページをリロード
「ブロックリセット行程」
リセットボタンクリック→ajaxで外部phpにアクセスして$_SESSION['articles']をunset→ページをリロード
と言う流れです。
※リロードした際、$_SESSION['articles']を持っていなければDBの内容をSESSIONに代入
持っていればその内容に沿ってHTMLをはきだす仕組みにしてあります。
[リセットの例]
javascript
1$("#reset").click(function () { 2 $.ajax({ 3 url: edit_reset_path, 4 type: 'post', 5 data: { 6 "token": SecurityId, 7 }, 8 timeout: 10000, 9 10 beforeSend: function(xhr, settings) { 11 $(this).attr('disabled', true); 12 }, 13 complete: function(xhr, textStatus) { 14 // ボタンを有効化し、再送信を許可 15 $(this).attr('disabled', false); 16 }, 17 success: function(response) { 18 if(response != 'error'){ 19 location.reload(); 20 }else{ 21 //割愛 22 } 23 }, 24 // 通信失敗時の処理 25 error: function() { 26 //割愛 27 } 28 }); 29}); 30
php
1 try { 2 if(!SecurityCheck(h($_POST['token']))){ 3 $response = 'error'; 4 throw new PDOException(); 5 } 6 $_SESSION['articles'] = array(); 7 unset($_SESSION['articles']); 8 //cookieの削除もしましたが結果かわりません。 9 10 } catch (PDOException $e) { 11 exit($response.$e->getMessage()); 12 } 13
色々割愛してますけど基本的にはこんな感じです。
「問題点」
ローカルでテストした段階ではサクサクに動いてくれたんですが WEBサーバーに設置してみると一回の操作で機能が反映されない事が頻繁にあり不安定です。(特にリセットが)
反映されていない状態でブラウザのリフレッシュを行うと想定通りの表示になります。IE・chromeで確認
リロードのタイミングが早いの?思って。
php・javascript双方で遅延(最大20秒程)させてみましたが結果は同じでした。
これは何が原因なんでしょうか?
対策のご指南をお願いいたします...m(_ _)m
/追記です !
-----------------------------------------/
フレームワークにsmarty使ってます!
cashはfalseにしてあります。
/更に追記です
----------------------------------------/
..やはり解決できていませんでした。
どうしても時々SESSIONが残ったままになってて..次のことを試してみました
削除するphp「try内部」
php
1 while(true){// 完全に消すまでこれでもか!と繰り返す 2 $_SESSION['articles'] = array(); 3 unset($_SESSION['articles']); 4 5 if(!isset($_SESSION['articles'])){ //無くなってたら勘弁してあげる 6 $response = count($_SESSION['articles']);//『0』を確認するためレスポンスしてみる 7 throw new PDOException(); 8 break; 9 } 10 }
送り側Ajax
javascript
1 $.ajax({ 2 url: 割愛, 3 type: 'post', 4 data: { 5 "token": SecurityId 6 }, 7 timeout: 10000, 8 9 beforeSend: function(xhr, settings) { 10 $(this).attr('disabled', true); 11 }, 12 complete: function(xhr, textStatus) { 13 $(this).attr('disabled', false); 14 }, 15 success: function(response) { 16 alert(response); //SESSIONが残る時はココ..無視されます 17 if(response == 'error'){ 18 //割愛 19 }else if(response > 0){ 20 $.ajax(this); //0以外の返事が来たらやり直させる 21 } 22 }, 23 error: function() { 24 //割愛 25 }); 26 window.location.href = master_dir+'/poooo/?'+SecurityId+'&data='+Data_Parameter
結果 不具合の時は レスポンスのアラートも無反応....飛ばされてしまいます。
いったい何が起きているんでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/12/01 04:36
退会済みユーザー
2016/12/01 04:49
退会済みユーザー
2016/12/01 18:57
退会済みユーザー
2016/12/02 10:51