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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

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

Q&A

解決済

3回答

2030閲覧

[2015/12/01現在まだ解決していません]ajaxで値をphpに送りたいが、受け取れない。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

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

0グッド

0クリップ

投稿2015/11/29 13:09

編集2015/12/01 09:32

よろしくお願いします。

やりたいことは、ラジオボタンにチェックを入れたらajaxで値をphpに送ることです。

現状、jsファイルが読み込めている事は確認出来ましたが、
ラジオボタンにチェックを入れても値が表示されません。

post.php

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <link rel="stylesheet" type="text/css" href="css/common.css" /> 6 <script type="text/javascript" src="js/jquery-1.11.2.min.js"></script> 7 <script type="text/javascript" src="js/main.js"></script> 8 <title></title> 9</head> 10<body> 11 12<form action="cacth.php" method="post"> 13 <input type="radio" name="val1" id="val1" value="hoge1">hoge1 14 <!--<input type="radio" name="val1" id="val2" value="hoge2" onClick="val2">hoge2--> 15</form> 16 17<?php 18if(isset($_POST['val1'])){ 19 print $_POST['val1']; 20}else{ 21 print "失敗"; 22} 23?> 24 25</body> 26</html>

main.js

jQuery

1$("#val1").click(function(){ 2 $.ajax({ 3 type: "POST", 4 url: "../post.php", 5 data: { val1 : 'a', val2: 'b' }, 6 success: function(data) { 7 alert("bbb"); 8 } 9}); 10

post.phpとjsフォルダが同階層、
jsフォルダの中にmain.jsが入っています。

反応しない理由は何なのでしょうか?

追記です。
クリックイベント内にアラートを記述してみましたが、反応しませんでした。
ラジオボタンを、普通のボタンにしても反応しませんでした。

onlode内に入れたら、successの処理は反応しました。
しかし、値を受け取れていません。

---さらに追記---
success内のアラートをalert(data)にしたところ、post.phpのhtmlコードが全部アラートで表示されました。
そしてその中には、
画像のような部分がありました。
どういうことなのでしょうか?

イメージ説明

jQuery

1$(function(){ 2 //alert("onlode"); 3 $("#val1").click(function(){ 4 //alert("aaa"); 5 6 $.ajax({ 7 type: "POST", 8 url: "http://localhost:1024/test/Ajax/post.php", 9 data: { 'val' : 'a'}, 10 success: function(data) { 11 alert("bbb"); 12 } 13 }); 14 }); 15});

php

1<?php 2if(isset($_POST['val'])){ 3 $val = $_POST['val']; 4 print $val; 5}else{ 6 print "失敗"; 7} 8?> 9<!DOCTYPE html> 10<html lang="ja"> 11<head> 12 <meta charset="utf-8"> 13 <link rel="stylesheet" type="text/css" href="css/common.css" /> 14 <script type="text/javascript" src="js/jquery-1.11.2.min.js"></script> 15 <script type="text/javascript" src="js/main.js"></script> 16 <title></title> 17</head> 18<body> 19 20 <form action="" method="post"> 21 <input type="radio" name="val1" id="val1" value="hoge1">hoge1 22 <!--<input type="radio" name="val1" id="val2" value="hoge2" onClick="val2">hoge2--> 23 </form> 24</body> 25</html> 26

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

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

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

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

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

guest

回答3

0

ベストアンサー

inputタグ内「onClick」はいらないですよ。多分そこがエラーになるので動作していないようですね(書き方間違ってる)。しかも、changeイベントの方がよいかもしれません。
あとこれは、Ajaxは必要なく、

javascript

1$(function() { 2 $("#val1").on("change", function() { 3 this.form.submit(); 4 }); 5});

で事足りると思います。

JavaScript コード修正: $(function() { }); を追加


さらに追記

$.ajax()を使った非同期通信ではサーバからの応答は、success内のdataに入ります。したがって、ページの更新は発生しないので、画面に結果を表示するには、その後の処理を記述しなければなりません。
つまり、
0.AjaxでサーバへPOST(post.php val="a")、応答待ち受け
0.サーバ側でPOST受け取りーphpで処理(<?php ~ ?>の部分)した後、送信
0.応答あり、コールバック処理success : function(data) {}。(この「data」にサーバから送信されたものが格納されている)
0.ここで、コールバック関数success : function(data)内でalert(data)とすることで、アラート内に質問者様追記分の画像にあるものが表示された。
ということではないでしょうか。
老婆心ながら、自分自身をajaxで要求するような混乱を招きやすい実装になっていますので、もう少しシンプルな実装を再考することをお勧めします。

投稿2015/11/29 13:55

編集2015/12/01 13:04
blackonyx

総合スコア354

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

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

退会済みユーザー

退会済みユーザー

2015/11/29 14:12

回答有り難うございます。 this.form.submit()ははリロードするとの事なのですが、これはページに更新がかかるという意味なのでしょうか。 非同期で行いたかったのでAjaxを使用しようと思っていました。 inputタグ内のonClickを消して、jsファイルに上記のコードを書きましたが動きませんでした。 成功すれば"hoge1"が表示されるということで間違いないですか?
blackonyx

2015/11/29 14:30 編集

失礼しました。 動かなかった理由は、スクリプト実行時にはまだ読み込みが完了していなくて、$("#val1")がうまく取得されていないからです。 上記javascriptのコードを以下のように修正してください $(function() { $("#val1").on("change", function() { this.form.submit(); }); }); これは、ドキュメントの読み込みが完了した時点でスクリプトを処理する記述です。
退会済みユーザー

退会済みユーザー

2015/11/29 14:43

確かに動きました。ありがとうございます。
blackonyx

2015/12/01 13:06

お疲れ様です。「さらに追記」に対する追加をしてみました。
退会済みユーザー

退会済みユーザー

2015/12/06 09:21

追記ありがとうございます。 Ajaxの仕組みがよく分かってないので、少し力を入れて勉強してみようと思います。
guest

0

[2015/12/01現在まだ解決していません]ajaxで値をphpに送りたいが、受け取れない。

てっきり解決したものだと思っていました。
いいですね、私こういう説明はわかりやすくて大好きです。

さて、本題です。
今回の場合、Ajaxでpost.phpを指定したときに戻ってくる値はpost.phpが出力したHTMLです。
その中身はalert(data)したときに表示されたものになります。

</body>の前についている「a」はAjaxを通してPOSTしたval1の値です。 post.php中でprint $_POST['val1'];しているでその値がそこに出力されています。

結果から見てpost.phpは値を受け取れています。

投稿2015/12/01 10:04

nage

総合スコア144

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

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

退会済みユーザー

退会済みユーザー

2015/12/06 09:22

回答ありがとうございます。 受け取れている状態なのですね。 ここから画面に出力する方法を頑張って探してみたいと思います。
guest

0

js側の値がうまく受け取れていないかもという場合はfirefoxならfirebug,chromeなどでjsでエラーがでていないか確認してみるといいですよ

投稿2015/11/29 22:47

KojiKuronuma

総合スコア20

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

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

退会済みユーザー

退会済みユーザー

2015/12/01 08:38

回答有り難うございます。 確認しましたが、エラーは一切出ていませんでした。 onlodeでアラートの記述をしましたが、アラートはしっかり動いています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問