ajaxを使ってPHPにデータを受け渡したい。
解決済
回答 4
投稿
- 評価
- クリップ 3
- VIEW 10K+
初心者のものです。
現在、ajaxを用いて、JavaScriptからPHPへデータを
受け渡そうとしているのですがうまく表示が出来ないようです。
JS側ではsuccessとなるみたいなので、PHP側で問題が
あるのではないかと考えています。
ご教授頂ける方がおりましたら、何卒アドバイス宜しくお願い致します。
コードは以下の通りとなります。
$.ajax({
type: 'POST',
url: './test.php',
dataType:'text',
data: {
name1 : "a"
},
success: function() {
alert("成功");
location.href = "./test.php";
}
});
test.php
<?php
if (isset($_POST["name1"])) {
echo $_POST['name1'];
} else {
echo "値が入力されていません";
}
?>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+3
PHPには値が渡せてます。
以下でやってみてください。
$.ajax({
type: 'POST',
url: './test.php',
dataType:'text',
data: {
name1 : "a"
},
success: function(data) {
alert("success");
//location.href = "./test.php";
}
});
success関数の引数のdataにechoされた値が戻ってきているはずです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+3
回答ではなく、確認方法です。
php側のechoを確認するには、以下の手順で確認が可能です。
- ChromeでF12を押してデバッグモードにする
- Networkタブをクリック
- ajaxのトリガーを叩くと、アクセス先のphpファイル名が表示されるのでそれをクリック
- headersにPOST内容が表示される
- Responseにecho(等のphpのレスポンス)が表示される
デバッグするとき結構便利です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
私、こうやってまーす^^
$.ajax({
type: 'POST',
url: './test.php',
dataType:'text',
data: {
name1 : "a"
},
success: function(response) {
alert(response);
//location.href = "./test.php";
}
});
<?php
try {
if (isset($_POST["name1"])) {
$str = $_POST['name1'];
} else {
$str = '値が入力されていません';
}
throw new PDOException();
} catch (PDOException $e) {
exit($str.$e->getMessage());
}
こうやっとけば phpのエラーコードもレスポンスしてくれるから便利なんですよ^^
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
Ajax というか、JavaScript の XMLHttpRequest は
あくまで「裏」で動くものなので、ブラウザに echo はムリです。
確認するなら、例えば適当なファイルに書き込んでみるとかですかね。
<?php
if (isset($_POST["name1"])) {
$str = $_POST['name1'];
} else {
$str = '値が入力されていません';
}
file_put_contents('hoge.log', $str);
?>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/05/07 12:08
alert("success")でなく、alert(data)でためしたところ、"a"が戻ってきました。
1.alert(data)とした際、"a"が戻ってきたのは、
PHPからの受け渡しとして理解してよいのでしょうか?
2.PHP文では、データの受け渡しをechoすることが出来ないのですが、これは
$_POST['name1']という受け渡し方に問題があるのでしょうか。
長文になり、大変申し訳ございません。
もし、ご回答いただけましたら幸いです。
2016/05/07 12:24 編集
PHPが返してきた結果です。試しに送るデータをbとかに変えたらbが返ってくると思いますよ。
>2.PHP文では、データの受け渡しをechoすることが出来ないのですが、これは$_POST['name1']という受け渡し方に問題があるのでしょうか。
いや、渡し方も間違っていないですし、echoできているからsuccessで戻ってきます。
2016/05/07 12:59
kentei_syunrai さんの仰るとおり、
ajaxによって値を受け取っているtext.phpは見えない裏で動いています。
このtext.php内のデータがどのようになっているのかをデバックする(知る)には
現在やられているようにjavascript側でalertをだしたり、
text.php内ではerror_logなどでファイルに出力するなどの方法があります。
現状は何も間違っていませんので、
ajaxとlocation.hrefの違いを理解することと、
上記のようにajaxで呼び出すphpのデバッグ方法を覚えれば
解決できるのでは、と思います。
2016/05/07 14:49
今までの私の理解では、
ajax PHPデータ渡し -> test.php へデータ受領かつ保持
という理解でしたが、
ajax PHPへデータ渡し->PHPファイルへ(データ受けた後、当該ファイル記述内容処理)
という流れみたいですね
※誤りがあれば教えて下さい。
とはいえ、データが受け取った変数をデータベースに書き込む処理を追加して
確認してみたいと思います。
お二方、物覚えが悪い者に丁寧にコメントくださり、ありがとうございます!
2016/05/07 16:26
ajaxは非同期通信でデータ等のやり取りをするのに用います。
「ajax 非同期通信とは」などで検索するとその説明を見ることができます。
私は非同期通信=画面遷移する必要がない、と解釈しています。
ajaxを使った(非同期通信の)場合、
画面遷移することなくjavascriptからtest.phpにデータを渡し、
test.phpの出力結果を同じjavascript内で受け取って処理することができます。
ajaxを使わない(同期通信)場合、
test.phpに画面遷移し、test.phpの出力結果が表示されます。
location.href()やformのsubmitなど基本的にはこっち側にあたります。
普通は初学者は同期通信を「同期通信」という言葉も知らないで勉強し、
必要に迫られてajaxなどの非同期通信を知ることになるのですが、
jesushillさんはいきなりajaxから入ったようですね。
今時はそういう方も多いのかもしれませんね。
2016/05/07 16:51
非同期通信、同期通信といった言葉は知っていても、実際に使ってみると、「あー自分はよくわかっていないんだな」と実感しました。。