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

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

ただいまの
回答率

90.51%

  • CakePHP

    2316questions

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

cakePHP3でフォームの値を受け取りクエリ実行後結果を画面出力をする

解決済

回答 2

投稿 編集

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

sea1kiki1

score 4

○やりたいこと
controller のアクションで
formのPOST値(コントロール名は仮にkeywordと称する)を受け取り、その値を条件にして
クエリを実行。実行結果をformと同じ画面に表示

○環境
Server MAMP apache,php7,MySQL
cakePHP3.3

○現状
■controller action内

public function search()
{
  if($this->request->is('ajax')) {
     $this->autoRender = false;
     // (1) $keyword 取得
     // (2) $keywordでクエリ実行
     //      $this->find を使用
        conditionに(1)を渡す
     // (3) (2)の実行結果が一件以上あれば
           (もしくはクエリが失敗していない場合)
            $success = true;
     // (4) (2),(3)の結果を配列にセット
            $res = array(
                       'result' => (2)の結果,
                       'success' => $success
                   );

     return json_encode(compact('res'));
}

■view form内 method=post  POSTバックしている
// myformはformのid

$this->Form->input('keyword');
$this->Form->button(__('Submit'),array('id'=>'to_submit'));


■view <script>タグ内

<script type="text/javascript">
    $(document).ready(function(){
        $('#testsubmit').click(function(e){
            e.preventDefault();
            var keyword = $('#keyword').val();
            $.ajax({
                type: 'post',
                url:  '/(dir_name)/(controller_name)/search',
                dataType : 'json',
                data: { word: keyword} ,
                success: function(response){
                    alert('success');  // (A)
                },
                error: function(){
                    alert('error');    // (B)
                    msg = errorHandler(arguments);
                    alert(msg);
               }
            });
        });
    });

    $('#myform').submit(function(){
      return false;
    });

    function errorHandler(args){
      // エラー内容判定
      return message;
    }


○エラーなど
現状は、submitボタンクリックイベントで(B)のダイアログが表示されます。

○補足
controller内で
public $components = array('RequestHandler'); を記述
jquery.min.jsは、<head>内で記述

解決策をご存知の方がおられましたら、お願いいたします。
不足内容があればご指摘ください。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • popobot

    2017/01/16 06:16 編集

    質問のコードはMarkdownのコードブロック``` ```で囲ってください

    キャンセル

回答 2

check解決した方法

0

ご回答ありがとうございます。

icchiiさん
ご指摘のように、actionのreturnをechoに変更し、次行にexit;を追加
これで、controller側からJSON形式データの返却が確認できました。
ありがとうございます。

entry01さん
$this->request->is('ajax') のご指摘部分については、再掲になりますが、よくわかりませんでした。
よければもう少し詳しく教えていただけますでしょうか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/16 12:08 編集

    自分の回答を参考にして解決したのであれば、できれば自分の回答をベストアンサーにしてください。また、何故かマイナス評価を受けているのでプラスしてほしいですね...。

    ついでにcakephp内でexitを使うのはあまりよくないかもですね

    キャンセル

-1

質問のコードが断片的なので、状況を再現するのは難しいので、調査方法を回答します。

  • logs/error.logにエラーが記載されていないか調べてください。

  • ブラウザのデベロッパーツールのネットワーク情報で、ajaxでPOSTしたリクエストのステータスがどうなっているか確認してください。また、レスポンスデータにエラー等が記載されていないか確認してください。


なお、ざっとコードを見た感じだと、Controllerでjson_encodeした結果をreturnしていますが、echoに変えればうごくかもしれません。

echo json_encode(compact('res'));

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/01/16 08:06

    その前に $this->request->is('ajax') の問題があるきがするが気のせい?

    キャンセル

  • 2017/01/16 08:38 編集

    回答ありがとうございます。

    未解決です。
    が、以下の対応をしてみました。

    (ア)対応
    (1)action内でご指摘のように return していた箇所を echoに変更
    (イ)確認したこと
     (1)ブラウザFireFox 開発ツール → ネットワーク
       要求ボディ inputコントロールで入力した値が以下のように表示
        keyword=aaaa

    現状は、jqueryのerror:

    error: function(data,status,errors){
    alert('error');
    alert(data);
    alert(status);
    alert(errors);
    msg = errorHandler(arguments);
    alert(msg);
    }

    の箇所で、msgの内容は
    searchController Not Foundです
    本件で、この名前のcontrollerは存在しません

    引き続き、宜しくお願いできればと思います。

    キャンセル

  • 2017/01/16 08:41 編集

    Not Foundとでるなら、以下の部分の指定がおかしいのではないかと
    url: '/(dir_name)/(controller_name)/search',

    キャンセル

  • 2017/01/16 08:43 編集

    > その前に $this->request->is('ajax') の問題があるきがするが気のせい?

    コメントありがとうございます。どこが問題なのかご自身で別途回答してください。
    ajaxの場合、jsonを返したいという意図なので、別におかしくもないと思いますけど...

    キャンセル

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

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

関連した質問

  • 解決済

    JavaScriptを使用してPOSTの値を送信する。

    前提・実現したいこと JavaScriptを使用しフォームの値を複数送信したいのですが2つ目以降のデータを送るとき どのようにすればよいのかわかりません。 値を1つ送るだ

  • 受付中

    cakephpで投稿とその投稿結果を同じviewで記述することは可能?

    twitterのクローンサイトをcakeで作ってます。 自分の投稿に対する返信機能を実装してますが、 表題の通り、自分の投稿画面に返信用のフォームとその返信結果を同じ画面に

  • 解決済

    cakePHP3でDBを使わずバリデーションを使いたい

    現在cakePHP3を使ってアプリケーションを作っています。 Controller,Model/Table, Template直下にそれぞれファイルを作りました。 そこで質

  • 解決済

    CakePHP ViewからControllerへ値を渡す方法について

    実現したいこと CakePHPのControllerにViewからhtml値を渡したいです。 今まではFormのname属性が付いた値を送るしかしてこなかっため、具体的にどうす

  • 解決済

    検索結果表示

    こんにちは。 サイトない検索をphpで実装している。 検索ワードは、POSTで送信されてきたワードとGETで送信されてきたワードがあります。 両方の方法で送られてきたワー

  • 解決済

    ajaxでjsonにpost送信する

    cakephp2.0でjsonを変換しており、 jQueryのajaxでjsonに変換したデータを非同期通信にて、 画面遷移なしでformから送信したデータを ホームに反映し

  • 解決済

    php掲示板作成について。

    前提・実現したいこと php7.0.12にて、掲示板作成をしてる 出力先はcsvである。 コメントを未入力の場合のエラー表示が何故か出来ない。コメント入力してもec

  • 解決済

    【JavaScript】formの値を、jsonに変換して、postしたい。そして、action先に...

    やりたい事 formの値を、jsonに変換して、postしたい。 そして、action先に遷移したい。 ちなみに、 「出来るだけフロント側で対応してほしい。(他のデータ

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

  • CakePHP

    2316questions

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