• 締切済み

jqueryの変数にリクエストデータを代入したい

現在独学でcakephpを使ってブログの作成をしています。 その中でjqueryをつかっているのですが、jqueryの変数に$this->request->dataを代入することは可能でしょうか? たとえば、 var one = '<?php echo $this->request->data('Post.1.title'); ?>'; こうした場合はalertでうまく表示されたのですが、 var two = $('input#title').attr('class'); var three = $('input#title').length; var one = '<?php echo $this->request->data("Post.' + three + '.' + two + '"); ?>'; こうするとalertではなにも表示されません。(真っ白です) 書き方が違うんだろうなとは思うんですが、仕事が休みの日に家でやっているため質問できる相手もおらず、ネットで検索してもイマイチ分からず・・・ 初歩的な質問で申し訳ないのですが、どなたかご指摘等をよろしくお願いいたします。

noname#206561
noname#206561

みんなの回答

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.5

CakePHPとかjQueryの前に、Webプログラミングの基礎を理解されていないように思います。 プログラミングが始めての方なのでしょうか…。 CakePHPやPHP・Java・JSPなどはサーバーサイドで実行されます。 jQueryやJavaScriptはクライアント再度で実行されます。 サーバーサイドで実行されたプログラムは、サーバーで実行が終了しHTMLを出力し、インターネットを介してパソコンに送信され、受信した後ブラウザで表示されます。その表示処理の中で、jQueryやJavaScriptが実行されるのです。 あなたはCakePHPとjQueryをごちゃ混ぜに書いても、言語に関係なく上から実行されると思っているのだと思います。しかしそんなわけはなく、必ず先にCakePHPを解釈しようとし、それが終了した後にjQueryが実行されるのです。 だからこのコードだったら # var one = '<?php echo $this->request->data('Post.1.title'); ?>'; # var one = '【送信されたタイトル】'; というコードをサーバーで出力したあとにJavaScriptが実行されるので正しく実行できるのです。 しかし以下は # var two = $('input#title').attr('class'); # var three = $('input#title').length; # var one = '<?php echo $this->request->data("Post.' + three + '.' + two + '"); ?>'; この部分で # var one = '<?php echo $this->request->data("Post.' + three + '.' + two + '"); ?>'; サーバーのPHPが「three」「two」を解釈できないので正しく処理できないのです。 ユーザーからの入力を受け付けて動的に処理をしたいのなら、Ajaxで処理するのがいいとは思いますが。その前に基礎的な部分の勉強がいろいろ必要だと思います。

  • sanzero
  • ベストアンサー率56% (58/102)
回答No.4

もうちょっとお勉強が必要そうですねぇ。 cakephpのフォームの登録辺りを見直してみてください。 実装の雰囲気としては以下のような感じです。 DBに保存されたタイトルから変更があったかどうかはjsのみで判断するのが普通ですかね。phpでも判断できますが時間かかるので。 ・ctp <form> <input id="title" type="text" value="<?php echo $title ?>"> <input type="submit" value="送信"> </form> ・js $(function(){ // データベースに登録されてるタイトルは // 画面表示時に変数としてもっとく var title = $('#title').val(); $('form').on('submit', function(){ // submitするときに比較 if (title === $('#title').val()) { alert('タイトル一緒やで'); // submitをキャンセル return false; } }); });

  • sanzero
  • ベストアンサー率56% (58/102)
回答No.3

ユーザーがなにをして、どうなる処理でしょうか。 処理の概要と処理の詳細をもうちょっと教えてください。

noname#206561
質問者

補足

すみません、ありがとうございます。 ブログの内容の編集ページでのことなんですが、 編集用のタイトルのフォームにはデータベースからとってきた$this->request->data['Post']['1']['title']が表示されている ↓ ユーザーがタイトルを編集するために、表示されていたものを一度消して新たに入力をする ↓ jqueryで$this->request->data['Post']['1']['title']と新たに入力されたものが一致するかチェックし、一致したらメッセージ表示 という流れです。 タイトルだけでなくサブタイトルなど、他の項目もチェックしたいので、['1']['title']の部分をjqueryでclassを取得するなりして変数に代入することはできるのか?と考えたのです。 更新の際にバリデーションでユニークのチェックをしていたのですが、ちょっとjqueryの勉強を始めたいと思っていたので・・・。 説明が下手くそで申し訳ありません。 よろしくお願いいたします。

  • sanzero
  • ベストアンサー率56% (58/102)
回答No.2

jsの中にphpの変数を書くのはよろしくありません。 使用したい場合は一度htmlとして書き出した後に取得します。 postした値をjsで受け取ってどういう処理をしたいのでしょう?

noname#206561
質問者

補足

ご回答ありがとうございます。 そうなんですか・・・。ネットで探してもこのような例が見られないのは、あまりよくないからなのですね。 phpでデータベースからとってきたブログのタイトル($this->request->data['Post']['1']['title'])をフォームに表示し、そのタイトルが消されたあと入力された値をjqueryで取得し、もし一致したら~・・・という処理をしたいのです。 よりいい方法はもちろんあるのでしょうが、この場合にうまくいかないのは何故?とスッキリしなくて質問させていただきました。 もしよろしければ、もう一度ご回答いただければ幸いです。 よろしくお願いいたします。

回答No.1

まずはクライアント(ブラウザ)側で処理されるものと サーバ側で処理される(php)ものをきちんと理解したほうが良いと思う。 jsはphpで生成されたソースがブラウザに返された後に動く。

noname#206561
質問者

お礼

ご回答ありがとうございます。 まだあまりきちんと理解できていないままいろいろ試そうとしていました。 phpの変数を直接代入した場合はうまくいくから、書き方に問題が?と悩んでいました。 勉強不足ですね。精進します。 ありがとうございました。

関連するQ&A

  • jqueryの$.ajaxで送信できない

    はじめまして。 jquery初心者ですが、$.ajax使ってのPOST送信ができません、php側でログを取ってみてもアクセスすらしません。若干お手上げなので、分かる方がいたら、アドバイスを頂けませんか? 【やりたいこと】 formにデータを入力(html)し → jqueryを使ってpost送信(js) → 認証(php) → 結果をhtmlに表示させたい。 【ソース】 -a.html- <form method="post" id="signin" action=""> <input id="email" name="email" value="" title="email" class="required" tabindex="4" type="text"> <input id="posturl" type="hidden" name="posturl" value="a.php"> <input id="signin_submit" value="Sign in" tabindex="6" type="submit"> </form> -------- -a.js- $(function() { $("form#signin").submit(function() { var email = $("input#email").val(); var postFile = $("input#posturl").val(); var data = {email:email}; $.ajax({ type: "POST", url: postFile, data: data, timeout: 1000, error: function(){ // エラー時 alert('Error'); }, success: function(data) { if(data != ''){ alert(data.result); } else { alert('no data'); } } }); }); }); -------- -a.php- (他略、とりあえず適当に出力してみる) echo "{'status': false,}"; exit; -------- よろしくお願いします。m_m

  • jQueryでGETだと送信できるデータがPOSTだと送信できません。

    jQueryでGETだと送信できるデータがPOSTだと送信できません。 jQueryをつかって文字列をPHPに送信したいのですが、GETでは送信できるのにPOSTだと送信ができません。 js -------------------- $.ajax({ type:"POST", //GETだと送信できます。 url:"hoge.php", data:{data:"hoge"}, success:function(data,status){ alert(data); } }); -------------------- php -------------------- <?php $_POST[data] //GETの場合、$_GET[data] == "hoge"。 echo $data; ?> -------------------- 問題点がわかりましたらご指摘いただければと思います。

  • フォームからjQuery,jQuery.jsonを使ってJSONを作っ

    フォームからjQuery,jQuery.jsonを使ってJSONを作ってPHPで表示したい。 こんばんは。2、3日ずっと悩んでて解決しないので助けてください。 jQuery,jQuery.jsonを使ってJSONを作成しています。 クリックイベントに var form = $("#sform"); var json = $(form.serializeArray()); var strJson = $.toJSON(json); という形をとって $.ajax({ url : "request.php", type : "post", data : strJson, success: function(request){ $('#result').html(request); } }); で送っています。 ただPHP側で var_dump($_POST); を行ってもArray ( ) と表示されます。 firebugで見たところpostに入っているデータは以下の通りです。 {"0":{"name":"date","value":"2010/09/15"},"1":{"name":"type","value":"new"},"2":{"name":"bin[]","value":"2"},"3":{"name":"bin[]","value":"3"},"length":4} var_dumpで表示できないのはなぜでしょうか? 上記で変数json のまま送るとオブジェクトとして送れてvar_dump でも表示できます。 ただ今はjson の勉強をしているので、できればなぜこうなっているのかを理解したいです。 基本的なところで勉強不足かもしれませんが、何かアドバイスなど頂けると嬉しいです。 よろしくお願いします。

  • jQuery $.ajax JSON形式のPOST

    jQuery $.ajax JSON形式のPOSTでフォーム内容を送信し、送信先のPHPでメール送信させるプログラムをかいているのですが、どうしても$.ajaxのerrorが呼び出される状況です。errorが呼び出されますが、PHPの方のメール送信はできております。 PHP側の出力がうまくいっていないのではないかと思いますが、原因がわかりません。どなたかご教授いただけないでしょうか?宜しくお願いします。 ---js--- $("#send").click(function(){ var NAME = $('#name').val(); var EMAIL = $('#email').val(); var TITLE = $('#titlel').val(); var COMMENT = $('#comment').val(); $.ajax({ url : "sendmail.php", dataType : "json", data : {name:NAME, email:EMAIL, title:TITLE, comment:COMMENT}, type : "post", success : function(data){ if(data != ''){ alert(data.result); } }, error : function(){ alert("通信に失敗しました。"); } }); }); ---sendmail.php--- if($_SERVER["REQUEST_METHOD"] != "POST"){ header("HTTP/1.0 404 Not Found"); return; }else{ //メール送信処理 (省略) $message = "送信完了メッセージ"; $result = array('result' => $message); echo json_encode($result); }

  • $ka = $_REQUEST[\"FFF\"];が変数に代入できなくて困ってます┐(´~`;)┌

    今任意の名前でファイルを生成するPHPを作っています。ファイルの中身に$ka = $_REQUEST[\"FFF\"];というコードをファイル作成時に書き込みたいんですが、どうも変数 $HTMLにうまく代入されてくれません。もし、どこが問題なのかわかる方どなたかいらっしゃいましたらアドバイスお願いしますΣo(≧~≦)o。 下にコードを書いておきます。 <form name="form" action="A.php" method="POST"> HTMLファイルの名前 <input name="DAI" type="text"> <input type="submit" value="作成"> </form> <?php $DAI = $_REQUEST["DAI"]; ?> <!-- 【この下のコード$ka = $_REQUEST[\"FFF\"];がうまく変数$HTMLに代入されません】 --> <? $HTML="$ka = $_REQUEST[\"FFF\"];" ?> <?php $fp = fopen("$DAI.php","a"); fputs($fp,$HTML); fclose($fp); echo "ファイル作成成功!"; ?> <? print"$DAIが作成されました"; ?> <? print"<A href=\"http://localhost/$DAI.php\">作成された貴方のファイルへのリンク</A>"; ?>

    • ベストアンサー
    • PHP
  • php→JavaScript間の変数受け渡し

    phpで文字列を入れた変数をJS側に渡して、アラートで表示させるために、下記のソースを作成しました。ボタンを押したらアラートが出ると想定して作成しました。 ※フレームワークにcakePHPを使用しています。 ------------------------------------------------------------------------ <?php $aaa = 'abc'; echo '<input type="button" onClick="xxx()">'; ?> function xxx() {  var bbb = <?php echo $aaa ?>;  alert(bbb); } ------------------------------------------------------------------------ しかし、上記の記述では正常にアラートが表示されません。 そこでいろいろ試してみた結果、 「$aaa = 'abc';」ではなく、 「$aaa = '111';」や「$aaa = 111;」だと正常にアラートが表示されました。 このことから、数字や数値だとうまくいくことがわかりましたが、今回は文字列の受け渡しを行ないたいと考えています。 何かご存知の方がいらっしゃいましたら、アドバイスを頂けると幸いです。 備考 当たり前なのかもしれませんが、 「var bbb = <?php echo $aaa ?>;」ではなく 「var bbb = 'abc';」とjs側で文字列を直接入力すると、アラートは正常に表示されました。 変数で文字列を渡す方法がわからず、半日ほど時間を使ってしまいました。 本当によろしくお願いします。

    • ベストアンサー
    • PHP
  • Ajax・jQueryでGETとPOSTする方法

    画像をクリックしたときにjQuery,Ajaxを利用してGET/POSTをしたいです。 POSTとGETは良く使うので今回両方の流れを知りたいと思います。 PHPではPOST、GETは使うことができます。javascript,jQueryはちょっと触ったことのある程度です。 フォームに値を入力してjQueryとAjaxでPOSTでデータを送るのは下記ホームページを参考にしてみたら成功しました。 http://webcake.no003.info/webdesign/jquery-ajax-php-post-sample.html 今回は下記のような複数のパラメータを送信したいと思います。 画像Aをクリックした時にkeyword=aaaa,cate=1 画像Bをクリックした時にkeyword=bbbb,cate=2 画像Cをクリックした時にkeyword=cccc,cate=3 今までPHPでGETを使っていた時のHTML部分です↓ <a href="index.php?keyword=aaaa&cate=1"><img src="images/a.jpg"></a> <a href="index.php?keyword=bbbb&cate=2"><img src="images/b.jpg"></a> <a href="index.php?keyword=cccc&cate=3"><img src="images/c.jpg"></a> 「send.phpファイル」 <?php //POSTでデータが送られた場合 echo $_POST['keyword'].'<br>'; echo $_POST['cate'].'<br>'; //GETでデータが送られた場合 echo $_GET['keyword'].'<br>'; echo $_GET['cate'].'<br>'; ?> ==GET================================================================ (HTML部分) <a href="index.php?keyword=aaaa&cate=1"><img src="images/a.jpg"></a> の記載方法だと、クリックしたときにアドレスバーにアドレスが入力されるのでページが切り替わってしまいAjaxにならないので違う形にする必要があると思いますがどのようにkeyword,cateのパラメータを持たせればよいのでしょうか? または、この形のままで良く、リンクした時にページが飛ばないような処理方法があるのでしょうか?(またはAjaxではあまりGETは使わないのでしょうか?) 上記に記載した、POSTの参考例のソースを記載します。 GETの場合にどのように変えたらよいのでしょうか。 $(document).ready(function() { var data = {request : $('#request').val()};//GETで複数値対応に書き換えが必要。 $.ajax({ type: "GET", url: "send.php", data: data, success: function(data, dataType) { $( '#test' ) . html( data ); },error: function(XMLHttpRequest, textStatus, errorThrown) { this; alert('Error : ' + errorThrown); } }); }); ==POST================================================================ (HTML部分) formを使う形になると思いますが、どのような書き方が良いのか教えて下さい。 画像を使うと下記のようになるとは思いますが、A,B,Cそれぞれにkeyword,cateの情報をどのように持たせておいたらよいのかがわかりません。 <form> <button type="submit" name="" value="*****"><img src="sample.gif"></button> </form> (jQuery部分) $(document).ready(function() { var data = {request : $('#request').val()};//POSTで複数値対応に書き換えが必要。 $.ajax({ type: "POST", url: "send.php", data: data, success: function(data, dataType) { $( '#test' ) . html( data ); },error: function(XMLHttpRequest, textStatus, errorThrown) { this; alert('Error : ' + errorThrown); } }); }); 以上、よろしくお願い致します。

    • ベストアンサー
    • AJAX
  • jquery,ajaxによるphp通信でnull

    初めまして。 現在jqueryを勉強中の学生です。 いろいろなサイトを参考にしつつ、試しににjquery・ajaxを使ったphpとの通信を試みているのですが、文字列のやりとりがうまくいきません。 数字ではうまくいくのですが、文字になるとalertの部分でnullと返されてしまいます。 アドバイス等頂ければと思います。 よろしくお願いいたします。 以下部分的ではありますがコードを示します。 (jqueryはjquery-1.11.1.min.jsを使用) [js] $.ajax({ type: "POST", url: "step1.php", data: send_data, success: function(receive_data) { var parseAr = JSON.parse(receive_data); alert(parseAr[0]['name']); }, error: function(XMLHttpRequest, textStatus, errorThrown) {alert('Error: ' + errorThrown); } }); return false; [php側] <?php if(isset($_POST['name'])) { $result = array(); $result[] = array('name'=>'織田', 'age'=>'33'); $result[] = array('name'=>'織田', 'age'=>'33'); echo json_encode($result); } else { echo json_encode('The parameter of "name" is not found.'); } exit; ?>

  • フォームから受け取ったデータを変数に/PHP

    入力フォームからデータを送信し、受け取ります。 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> この時に受けったデータが、「りんご」だとして この「りんご」を変数にしたいです。 ↓ <?php $keyword = "りんご"; ?> このようにするには、 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> の後にどのような処理をすればよいでしょうか? または初めから「$keyword」としてフォームからデータを送ることはできるのでしょうか? 何卒ご指導の程よろしくお願いします。

    • ベストアンサー
    • PHP
  • jquery codeigniterからデータ取得し表示する

    こんばんは。jquery初心者ですので、説明不足があればご指示ください。 codeigniterとjqueryを利用しています。 下記、class="name1"とclass="email1"のデータを、test/test2に渡し、 aaaで値を受け取っています。 受取る値が、Arrayと出ますが、それを表にする場合、どのようにすればいいのでしょうか? 【希望する表示】*例えばtableにする場合 <table> <tr> <td>担当者</td><td>名前</td><td>会社名</td> </tr> ~ここからデータ分ループ?~ <tr> <td>tantosha</td><td>name_jp</td><td>kaishamei</td> </tr> ~ここまでデータ分ループ?~ </table> 【jquery側】 $(".test").click(function(){ var serial = $('.name1').serialize() + '&' + $('.email1').serialize(); $.post("test/test2", serial, function(aaa){ alert(aaa);→分からないので、今はこうしてます^^ }); }); 【codeigniter側】 function test2(){ $a_name = $this->input->post('name1'); $email1 = $this->input->post('email1'); $this->db->select('tantosha'); $this->db->select('name_jp'); $this->db->select('kaishamei'); $this->db->from('テーブル名'); $where = "name_en like '%".$a_name."%' || email1 = '".$email1."'"; $this->db->where($where); $query = $this->db->get(); echo $query->result();

専門家に質問してみよう