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

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

ただいまの
回答率

90.75%

  • JavaScript

    15267questions

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

  • jQuery

    6314questions

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

  • CakePHP

    2217questions

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

CakePHPのSESSION情報をJavaScriptから記録するには?

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 551

gekota

score 2

CakePHP3で作成し登録ページで、A画面(登録用)とB画面(データ検索用)があります。
A画面からB画面を別ウィンドウで開き、TABLEタグの選択行のデータをA画面に貼り付けて、登録を行いたいです。
JavaScriptでB→A画面への貼り付けは実現できました。
しかし、ID情報も登録したいため、B画面の操作でSESSIONに登録したいと考えています。

色々調べてみましたが、CakePHPのSESSION情報にJavaScriptからの追加登録するのは困難なため、JavaScriptを使って、B画面からPOST処理を行い、B画面のコントローラでPOSTのリクエストが来たら、CakePHPのSESSIONにJavascriptの値を記録したいと思っています。

jQueryを使って、POST処理をすると、クロームのコンソールでは[POST http://xxxxx 400 (Bad Request)]というエラーになります。
どの様にすれば、Javascriptの値をCakePHPのSESSIONに登録出来ますでしょうか?

エラー内容詳細

{"readyState":4,"responseText":"{\n    \"message\": \"\\u0027_Token\\u0027 was not found in request data.\",\n    \"url\": \"\\/test-ajaxs\\/sample\",\n    \"code\": 400,\n    \"file\": \"C:\\\\xampp\\\\htdocs\\\\cakeapp\\\\vendor\\\\cakephp\\\\cakephp\\\\src\\\\Controller\\\\Component\\\\SecurityComponent.php\",\n    \"line\": 345\n}","responseJSON":{"message":"'_Token' was not found in request data.","url":"/test-ajaxs/test","code":400,"file":"C:\\xampp\\htdocs\\cakeapp\\vendor\\cakephp\\cakephp\\src\\Controller\\Component\\SecurityComponent.php","line":345},"status":400,"statusText":"Bad Request"}
// jquery.js
+function($) {

var my_no;

$.exTableTrClick = function(){

$("#mySubmit").on("click",function(){
my_no = '123456';
var url = './test-ajaxs/sample';
var JSONdata = {message: my_no};

alert(JSON.stringify(JSONdata));
 $.ajax({
    type : 'post',
    url : url,
    data : JSON.stringify(JSONdata),
    contentType: 'application/JSON',
    dataType : 'JSON',
    scriptCharset: 'utf-8',
    success : function(data) {
      // Success
      alert("success");
      alert(JSON.stringify(data));
      $("#response").html(JSON.stringify(data));
    },
    error : function(data) {
      // Error
      alert("error");
      alert(JSON.stringify(data));
      $("#response").html(JSON.stringify(data));
    }
 });
}}
// TABLEタグから抽出するコードは割愛しています。
// var my_no に選択した情報がセットされると仮定します。
}(jQuery);
// TestAjaxsController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\Network\Exception\ForbiddenException;

class TestAjaxsController extends AppController
{
    public function index() {
    if ($this->request->is('post')) {
       $postdata = $this->request->getData();
       $session = $this->request->session();
       $session->write([
             'Menber.id' => $postdata->my_no]);
    }
}}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

CahePHP3は使ったことはありませんが(CakePHP2x)、
エラー内容詳細がJSONで返ってきてますのでこのままだと読み難いので
一回パースした内容を貼り付けたほうがいいかもしれません

で、一回パースしてみました

{
    "readyState": 4, 
    "responseJSON": {
        "code": 400, 
        "file": "C:\xampp\htdocs\cakeapp\vendor\cakephp\cakephp\src\Controller\Component\SecurityComponent.php", 
        "line": 345, 
        "message": "'_Token' was not found in request data.", 
        "url": "/test-ajaxs/test"
    }, 
    "responseText": "{
    "message": "\u0027_Token\u0027 was not found in request data.",
    "url": "\/test-ajaxs\/sample",
    "code": 400,
    "file": "C:\\xampp\\htdocs\\cakeapp\\vendor\\cakephp\\cakephp\\src\\Controller\\Component\\SecurityComponent.php",
    "line": 345
}", 
    "status": 400, 
    "statusText": "Bad Request"
}

SecurityComponent(345行目)というコンポーネントで引っかかっているようです。
「リクエスト内にTokenがありません」という内容でしょうか...。

考えられるのはPOSTでリクエストする際に認証用のトークンが必要なのにそれが無い、と言っている感じがします。
リクエスト内容を再度確認してみてはどうでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    cakephpで個別記事が削除されない件

    cakphp初心者です。 簡易会員制掲示板を作ってますが、 個別記事が削除されません。 参照コードを下記に記載いたしますので、どなたかご教示ください。 【Pos

  • 解決済

    チェックボックスのバリデーションが出来ない

    規約に同意のようなチェックボックスのバリデーションを作っているのですが、エラーメッセージが表示されません。 これ以外のバリデーションはちゃんと表示されます。 <!--フォー

  • 解決済

    Cakephp3でバリテーション

    前提・実現したいこと CakePHP3でユーザ仮登録のバリテーションをかけようと思っています。 フォームに正しくない値を挿入すると、リダイレクトはされずにいますが、エラーメッセ

  • 解決済

    CakePHP3で複数レコードのINSERTを行いたい。

    CakepPHP3でフォームにループで組んだ情報を一度に書き込んでいきたいと思います。 現在、一つのレコードに関しては、実装済なのですが、いろいろと不具合が生じてきました。

  • 解決済

    cakephpのコメント機能について

    cakephpwp用いたコメント機能を実装しようとしているのですがうまくいきません。 http://www.grooving-earth.com/cakephp-lesson

  • 解決済

    CakePHPのAuth認証の結果取得

    質問内容 CakePHPのAuth認証の結果取得について、登録済みのユーザーネームとパスワードをPOSTしても全てログイン失敗が返ってきます。下記の前提ファイルの誤りをご指摘いた

  • 解決済

    FormDataの値(ファイル)をajaxを使用してphpに渡したい

    ユーザー間でメッセージや画像を送信できるトークルームのシステムを作っています。 var talk_time = $('#talk_time'); talktime

  • 解決済

    cakephp チェックボックスの複数の値(配列)の受け取り方が解りません。

    cakephp チェックボックスの複数の値(配列)の受け取り方が解りません。 どうしても Error: SQLSTATE[42S22]: Column not found: 105

同じタグがついた質問を見る

  • JavaScript

    15267questions

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

  • jQuery

    6314questions

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

  • CakePHP

    2217questions

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