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

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

ただいまの
回答率

89.23%

ajaxを使ってPHPにデータを受け渡したい。

解決済

回答 4

投稿

  • 評価
  • クリップ 3
  • VIEW 8,819

jesushill

score 37

初心者のものです。
現在、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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

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された値が戻ってきているはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/07 14:49

    お二方、コメント頂きましてありがとうございます。
    今までの私の理解では、
    ajax PHPデータ渡し -> test.php へデータ受領かつ保持
    という理解でしたが、
    ajax PHPへデータ渡し->PHPファイルへ(データ受けた後、当該ファイル記述内容処理) 
    という流れみたいですね
    ※誤りがあれば教えて下さい。
    とはいえ、データが受け取った変数をデータベースに書き込む処理を追加して
    確認してみたいと思います。

    お二方、物覚えが悪い者に丁寧にコメントくださり、ありがとうございます!

    キャンセル

  • 2016/05/07 16:26

    ajaxを使おうと使いまいとphpがやること、やれることに変わりはないです。

    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

    nobuzohさん、詳細な説明頂きましてありがとうございます。仰るとおり、PHPはGWから勉強をしている初学者です。今はなんとかPHPを使えるよう、頑張っている最中です汗
    非同期通信、同期通信といった言葉は知っていても、実際に使ってみると、「あー自分はよくわかっていないんだな」と実感しました。。

    キャンセル

+2

回答ではなく、確認方法です。
php側のechoを確認するには、以下の手順で確認が可能です。

  • ChromeでF12を押してデバッグモードにする
  • Networkタブをクリック
  • ajaxのトリガーを叩くと、アクセス先のphpファイル名が表示されるのでそれをクリック
  • headersにPOST内容が表示される
  • Responseにecho(等のphpのレスポンス)が表示される

デバッグするとき結構便利です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/07 17:03

    ありがとうございます。networkタブは初めてつかいました。使いこなすのは慣れが必要ですが、非常に便利ですね!

    キャンセル

+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のエラーコードもレスポンスしてくれるから便利なんですよ^^

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/07 14:39

    ご回答頂きましてありがとうございます。
    エラーコードをレスポンスというのはエラーログでしょうか?
    ド基本ですみません。。

    キャンセル

  • 2016/05/07 16:34

    エラーメッセージだけですね

    エラーログ全ての情報が欲しい場合は
    $str = error_log("エラー確認!", 0);
    ってしておけばいいんじゃないでしょうか?

    キャンセル

  • 2016/05/07 16:51

    おおっありがとうございます。エラーログすらわかっていなかったんで、助かります!

    キャンセル

0

Ajax というか、JavaScript の XMLHttpRequest は
あくまで「裏」で動くものなので、ブラウザに echo はムリです。
確認するなら、例えば適当なファイルに書き込んでみるとかですかね。

<?php
if (isset($_POST["name1"])) {
    $str = $_POST['name1'];
} else {
    $str = '値が入力されていません';
}
file_put_contents('hoge.log', $str);
?>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/05/07 11:28

    回答ありがとうございます。回答頂きましたコードで試してみたところ、PHP側で値が入力されていないことがわかりました。
    ajax側ではsuccessまでいくのですが、php側へ送るデータの型などに問題があるのでしょうか。。

    キャンセル

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

  • ただいまの回答率 89.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる