質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

3102閲覧

PHPで保存して表示させているCookieの値を、jsを使ってクリックで非同期的に削除したい。

smnsmn

総合スコア175

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2016/05/12 08:20

編集2016/05/19 06:35

PHP、CakePHPを使って開発をしています。
jsやjQueryはほとんど触ったことがありません。

現在、(Cake)PHPで検索したキーワードをCookieに保存し、検索ボックスに履歴として表示させております。
※一部省略しています。

PHP

1//Cookie保存処理 2function __setKeywordCookie() { 3 if (isset($this->request->query['keyword']) { 4 $keyword = $this->request->query['keyword']; 5 //~~~$keywordを整える処理諸々~~~~// 6 $new_keyword[] = $keyword; 7 } 8 9 if ($this->Cookie->check('hoge_history')) { //既存のCookieに保存 10 $history = $this->Cookie->read('hoge_history'); 11 12 //新しいキーワードを先頭に、既存のキーワードと一つの配列に 13 foreach((array)$history as $row){ 14 $new_keyword[] = $row; 15 } 16 17 $new_history = array_unique($new_keyword); 18 array_splice($new_history, 20); 19 20 $this->Cookie->write('hoge_history', $new_history); 21 $this->set('history', $new_history); 22 23 } else { //Cookieが無ければ新しく作成 24 if (isset($keyword)) { 25 $this->Cookie->write('hoge_history', $keyword); 26 $history = $this->Cookie->read('hoge_history'); 27 $this->set('history', $history); 28 } 29 } 30 } 31

View側にセットした$historyを、foreachで履歴として表示させています。
今回は、このViewで表示させている履歴に、「✕」を表示し、クリックで履歴が非同期で削除され非表示になる、ということをやりたいのですが、

JavaScriptで下記のようにして、履歴ワードを表示させている<li>をクリックで削除にはできるのですが、
Cookieごと削除となるとどのように、というかどこにどの処理を書けば良いのか分からず質問させて頂きました。

HTML

1//View部分 2<?php foreach((array)$history as $row): ?> 3 <li><span class="delete_button">✕</span><?php echo $row; ?>"></span></li> 4<?php endforeach; ?> 5

Javascript

1//先述のCakePHPファイルとは別ファイルです 2//~~~~諸々省略しています~~~~// 3 delete_button.on("click",function(){ 4 $(this).parent("li").remove(); 5 }); 6

なにか、参考やヒント、アドバイスを頂けませんでしょうか。
何卒、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

JavaScriptでcookieを削除することもできます。

【[JavaScript]PHPとJavaScriptで同じCookieを操作する - webase.info】
http://webase.info/htmlcssjs/690.html


JavaScriptでcookieを扱う場合は、jquery.cookie.jsが比較的簡単です。

【jQueryプラグイン「jquery.cookie.js」でcookieを簡単に扱う | Tips Note】
http://www.tam-tam.co.jp/tipsnote/javascript/post3109.html

【jquery.cookie.jsの使い方と簡単なサンプルを紹介します|Webpark】
http://weboook.blog22.fc2.com/blog-entry-404.html

投稿2016/05/12 09:51

kei344

総合スコア69357

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smnsmn

2016/05/19 06:46

PHPで保存しているCookieをJavaScript側で操作することができるのですね。 とても勉強になりました。 JavaScriptがまだ初心者なので、扱えるように勉強してみます。 ありがとうございます。m(__)m
guest

0

ベストアンサー

「非同期に」ということであれば、対象コントローラにcookieを全削除するメソッドを用意して、jsからAjaxにより呼び出し、コントローラ内のcookieを削除するということになると思います
ヒント程度で、申し訳ない

コードを追記:
自分は、AjaxはJQueryを使っているので、クライアント側は以下のような実装になります

JavaScript

1function (Xのクリックイベントを処理する関数) 2 $.ajax({ 3 type: "POST", 4 url: '/ドメイン名/コントローラ名/メソッド名(仮称:ClearSession)', 5 data: { 6 row_num : row // パラメータを設定 7 }, 8 success: function(data) { 9 // Ajaxが成功したときの処理 10 }, 11 error: function(data, status, errors) { 12 // Ajaxが失敗したときの処理 13 } 14 }); 15}

該当するコントローラ側のメソッドは以下のような実装になります

CakePHP

1function ClearSession() { 2 $this->autoRender = false; // autoRenderをオフにしてViewを処理しないようにする 3 4 $rtnData = array('status' => 'NG'); 5 try { 6 $row = GetParams::getParamForm('row_num', $this->params); // パラメータを取得 7 $this->Session->delete(); // 削除したいセッションの情報を指定 8 $rtnData = array('status' => 'OK'); 9 } catch (Exception $e) { 10 } 11 return json_encode($rtnData); 12}

投稿2016/05/12 08:33

編集2016/05/19 07:44
KatsumiTanaka

総合スコア924

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

smnsmn

2016/05/19 06:45

回答ありがとうございます。返事が遅くなり申し訳ありません。 Ajaxが苦手でして、少しお聞きしたいのですが、 例えば下記のようにリストで並んでいて、 <li><span class="delete_button">✕</span><?php echo $row; ?>"></span></li> <li><span class="delete_button">✕</span><?php echo $row; ?>"></span></li> <li><span class="delete_button">✕</span><?php echo $row; ?>"></span></li> この中の1つの✕をクリックした際に、それに対応した$rowの値をControllerに渡す場合どのようにすれば良いでしょうか?;;; Controllerに渡った$rowをCookieから削除し、 見た目的な削除は質問にも記載しているJavaScriptで削除したように見えるかと思ったのですが、 これだと非同期的にはならないでしょうか・・・。 JavaScriptで 〜〜〜 ✕をonclickで、 $.post("コントローラー/アクション", {  keyword: "<?php echo $row; ?>", }, function(data){  $(".対応するHTMLタグ").html(data['html']); //ここに''(空白)を渡す? } 〜〜〜 端折っていますがこんな感じのほうが良いのでしょうか? 良ければご回答頂けますと幸いです。
KatsumiTanaka

2016/05/19 07:45

簡単ですが、サンプルコードを追記しました
smnsmn

2016/05/31 01:59

遅くなりましたが。記述頂いたソースを参考にさせていただきながら、無事解決することが出来ました。 丁寧に解説いただき、ありがとうございました!!m(__)m 大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問