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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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アプリケーションを実現することができます。

Q&A

4回答

4165閲覧

jsファイル内で生成した変数をcakephpの変数に渡したい

退会済みユーザー

退会済みユーザー

総合スコア0

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アプリケーションを実現することができます。

0グッド

0クリップ

投稿2016/05/04 13:26

編集2016/05/05 12:22

###前提・実現したいこと
外出ししたjsファイルでクリックイベント毎に変数を生成し、cake2(var.2.7)に渡してPHPの変数としても使用したい。
ネットで調べながらコーディングしています。ajaxを使っていますが方法は問いません。

###発生している問題・エラーメッセージ
クリックイベントで通信確認用のアラートは機能したのですが、cakephpのコントローラー内の書き方がわからず、index.ctpに変数が反映されなくて困っています。

イメージ説明

###該当のソースコード

<ajaxTest.js>
var val = 0;
$(function() {
$(document).on('click', '#next', function() {
val++;
$.ajax({
url: "http://localhost/ajaxtest/users/index",
type: "POST",
data: { name : val },
dataType: "text",
success : function(data){
//通信成功時の処理
alert(data);
},
error: function(){
//通信失敗時の処理
alert('通信失敗');
}
});
})
});


<index.ctp>

<p>現在の変数「$index」の値:<?php echo $index;?></p> <p id="next">ここをクリック</p>

<UserController.php>

<?php App::uses('AppController', 'Controller'); class UsersController extends AppController { public function index() { if($this->request->is('ajax')) { $this->autoRender = true; //echo $this->request->data["name"]." :controller内のリクエスト確認用"; //$data = $this->request->data("name"); $data = $this->request->data["name"]; $this->set('index', $data); }else{ $this->set('index', 0); } } } ###試したこと ネットを参考に色々試しましたが、ajaxから渡ってきたdata["name"]をphpの変数に置き換える書き方がわかりません。よろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

解決していませんが、自分のphp,ajax,jsonの知識不足ために回答が理解出来ていないので、そこからやり直して、再度頂いた回答を参考にさせていただきます。回答有り難うございました。

投稿2016/05/08 04:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ajax,jsonをネットで調べて見ましたが今ひとつ理解できませんでした。解決策として使用したいデータをjson.encodeとjson.paseして、jsファイルのグローバル変数で受け取り、jsファイルからdocument.getElemntIdを使ってctpファイルを書き換えることでctpファイルとjsファイル内の値の整合性?をとってみました。
ご回答いただいた方には大変感謝しています。せっかく回答いただいたのに無にしてしまい済みませんでした。

投稿2016/05/07 03:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

PHP

1$this->autoRender = FALSE; 2```これだと`index.ctp`は使われませんし、`TRUE`にしたところで、`$this->set('index',$index);`が書かれていないので、`index.ctp`には何も渡されません。 3 4ちょっと何をしたいのか分からないのですが・・・ 5 6###追記 7```PHP 8<?php 9App::uses('AppController', 'Controller'); 10 11 class UsersController extends AppController { 12 13 public function index() { 14 15 if($this->request->is('ajax')) { 16 $this->autoRender = true; 17 //echo $this->request->data["name"]." :controller内のリクエスト確認用"; 18 //$data = $this->request->data("name"); 19 $data = $this->request->data["name"]; 20 $this->set('index', $data); 21 }else{ 22 $this->set('index', 0); 23 } 24 } 25 } 26 27```じゃないですか? 28jsonじゃなくて、htmlとしてレンダリングされますが、いいんですかね? 29やっぱりイマイチやりたいことが分からない・・・ 30 31なぜ、ajaxで呼び出しながら、htmlの結果を返すのでしょうか?

投稿2016/05/05 04:29

編集2016/05/05 05:35
shi_ue

総合スコア4437

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

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

退会済みユーザー

退会済みユーザー

2016/05/05 05:17

回答ありがとうございます。上記のようにUserController.phpを書き換えてみましたがindex.ctpに反映されませんでした。 したいことですが、 jsファイルでは、オンクリックでvalの値をjs内の配列のインデックスナンバーとして使い、 例:ytData[val]['id'] index.ctpではそのval($index)を使ってモデルから呼び出した配列のインデックスナンバーとして使いたいと考えています。例:<?php echo $videos[$index]['Video']['v_title']; ?> わかりづらくて済みません。
退会済みユーザー

退会済みユーザー

2016/05/05 09:53

追記有難うございました。感謝いたします。修正してみましたが駄目でした。 ajaxを利用したのは特に理由はなくネット上でjsからcakephpに変数を渡す方法として参考にさせていただきました。 やりた事は、どんな方法でも構わないのでjsファイルのオンクリックで生成される変数valを、その都度cakephpの変数$indexとしても受け取る方法です。 本当にわかりづらくて済みません。
guest

0

いろいろ方法がありますが、簡単なのは下記かと思います。

コントローラーのアクションで以下のようにします

php

1Configure::write ('debug', 0); 2$this->autoRender = false; 3$data=array('abc'); //渡したいデータの配列など 4return new CakeResponse ( 5 array ( 6 'body' => json_encode ( $data ) 7 ));

また、echoやデバッグ出力があると正しいフォーマットにならないのでデバッグ出力はOFFにします。

投稿2016/05/04 14:42

CodeLab

総合スコア1939

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

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

退会済みユーザー

退会済みユーザー

2016/05/05 02:23 編集

回答有難うございました。感謝します。早速試してみましたが、$data=array('abc')に渡したいjavascriptの変数('name')を代入してみましたが、空白のページに["name"]とだけ表示されてしまいました。 現行のコードではajaxのアラートはコントローラ内の echo $this->request->data["name"];と連動し出力できているのですが、 $index=$this->request->data["name"];などで単純にajaxからの値をphpの変数($index)に置き換えられないのでしょうか?
CodeLab

2016/05/05 09:31

jsonでの受け取りではなくHTMLということですか? $this->layout= false はdefault.ctpを使わないという意味です。必要なら入れてください。 <?php App::uses('AppController', 'Controller'); class UsersController extends AppController { public function index() { if($this->request->is('ajax')) { $this->layout= false; echo $this->request->data("name")." :controller内のリクエスト確認用"; $data =$this->request->data("name"); $this->set('index', $data); }else{ $this->set('index', 0); } } } /users/index.ctp <?php echo $index; ?> こんな感じじゃないですか?
退会済みユーザー

退会済みユーザー

2016/05/05 11:55

ポンコツな質問にご丁寧に再度回答頂き感謝します。これでも$indexの値が0で表示されてしまいました。受け取り方(json or html)についての理解が出来ていません。クリックイベントで取得した値(数字)をjsファイルでは変数valとして,cakephpでは変数$indexとして扱えるようにしたいのですが、受け取り方についてネットで、もう少し調べてみます。 回答有り難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問