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

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

新規登録して質問してみよう
ただいま回答率
85.47%
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ブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2168閲覧

cakephp3系でajax通信をしたいけどエラーで失敗してしまう

mittchy

総合スコア7

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ブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/06/03 05:34

編集2020/06/03 08:39

前提・実現したいこと

cakephp3でhtml側に商品IDのようなものをベタで書いて、その商品情報をAPI経由で取得するようなシステムを作成したいのですが、下記のソースコードですと403エラーが出てしまいます。

https://qiita.com/nava/items/21c08bb2a7f5a4dfe65e
こちらの記事を参考にroute.phpをコメントアウトしたのですが、今度は500 (Internal Server Error)が出てしまい、解決できませんでした。

どなたか解決策を教えていただけますでしょうか。

該当のソースコード

サーバー側

ProductsController

1 public function api() 2 { 3 $this->autoRender = false; 4 if($this->getRequest()->is('ajax')) { 5 $product_id = $this->getRequest()->getData('id'); 6 $products = $this->Products->find()->where(['id IN' => $product_id])->all(); 7 $this->set(compact('products')); 8 $this->set('_serialize', 'products'); 9 } 10 }

html(ctp)側

<div id="id"> <?php $id = []; $id = [1,2,3,4,5]; $product_id = json_encode($id); ?> </div> <script> var id = []; id = <?= $product_id ?> $.ajax({ url: "products/api", type: "POST", cache: false, data: {'id': id}, dataType: 'json' }).done(function(data, textStatus, jqXHR){ //通信成功! }).fail(function(jqXHR, textStatus, errorThrown){ //通信失敗! }); </script>

###補足
script内の記述を変更した所403エラーは無くなったのですが、失敗が返ってきてしまいfailメソッドに行ってしまいます。
デバッガーを使用して確認するとサーバーへのアクセスは出来ているようです。
追記:エラー内容はerror :SyntaxError: Unexpected end of JSON inputになっています。

<script> const csrfToken = '<?= $this->getRequest()->getParam('_csrfToken') ?>'; var id = []; id = <?= $product_id ?>; $.ajax({ url: "/products/api", type: "POST", cache: false, data: {'id': id}, dataType: 'json', headers: { 'X-CSRF-Token': csrfToken } }).done(function (data, textStatus, jqXHR) { //通信成功! alert("success"); }).fail(function (jqXHR, textStatus, errorThrown) { //通信失敗! alert("error"); }); </script>

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

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

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

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

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

guest

回答1

0

自己解決

サーバー側の「$this->autoRender = false;」を消したら動作するようになりました。

投稿2020/06/03 10:43

mittchy

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問