jqueryの$.ajaxでPHPに値を渡す方法とは?

このQ&Aのポイント
  • jqueryの$.ajax関数を使って、ajaxでPHPに値を渡す方法を紹介します。
  • ブラウザのCookieを無効にした場合において、JavascriptとPHP間のセッションが切断されるかどうかについても検証しました。
  • 詳しい方にご教授いただければ幸いです。
回答を見る
  • ベストアンサー

jqueryの$.ajaxでPHPに値を渡したい

下記の様にjquery(ver1.4.x)の$.ajax関数を使って、 ajaxでPHPに値を渡したいと思っています。 ■Javascript (中略) $.ajax({ type:"POST", url:"test.php", data:{"check":check}, success:function(){ alert("OK"); } }); ■PHP(test.php) if ($_POST) { $_SESSION["data"][] = $_POST["check"]; } この時、普通の状態ならtest.phpで値が受け取れ、$_SESSION["data"]の配列内には$_POST["check"]の値が格納される事を確認しました。 しかし、ブラウザのCookieを無効(ブロック)に設定した場合のみ、$_SESSION["data"]の中には$_POST["check"]の値が入らないのです。 session_start();はJavascriptのあるHTML、test.php両方に書かれています。 クッキー無効の場合はJavascript(ajax)-PHP間でセッションは切断されてしまうのでしょうか? php.iniの設定では session_use_cookiesもsession_use_only_cookiesもOnになっています。 詳しい方おられましたらご教授宜しくお願いします。

  • PHP
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 1minn
  • ベストアンサー率57% (52/90)
回答No.4

> クッキーが使えない環境の場合はURLでセッションIDを受け渡す仕組みの筈ですが、 そんな仕組みはないです。 iniの指定で初めて有効になりますが、画面上に見えてしまうのはよろしくないですね。 <input type="hidden" name="<?php echo session_name(); ?>" value="<?php echo session_id(); ?>" /> <script> function POSTするイベント() { data { 'PHPSESSID' : $("#PHPSESSID").val(), 'check' : check } ・・・ } </script> 的な感じはだめですかね? 他の方もおっしゃっているように > session_use_cookiesもsession_use_only_cookiesもOnになっています。 これではcookieにセッションを書き込もうとしますので、ブラウザがcookieを拒否すれば動かないのは当然の結果になります。 余談ですが・・・ if ($_POST) {  じゃなくて if (isset($_POST['check'])) { かな?

tomatocot
質問者

お礼

クッキー無効状態ではやはり動作しなかったため、諦める事にしました。 ご回答ありがとうございました。 大変参考になりました。

その他の回答 (3)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 試してはいないのですが、URLにではなくパラメータに含めてみてはいかがでしょうか。 checkとPHPSESSIDを送信する感じです。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>session_use_only_cookiesもOnになっています。 であれば、セッションIDがURLパラメータでは引き渡されないですよね。その状態でCookieが使えなければセッションの利用は無理です。 http://www.php.net/manual/ja/session.idpassing.php

tomatocot
質問者

お礼

さっき試してみたので補足事項となりですが、 $.ajax({ type:"POST", url:"test.php?<?=SID?>", (略) とした所、何とかソース上はセッションIDをURLの末尾に付けられましたが、 test.phpに値が渡されていないのは同様でした。 (クッキーを有効にすると渡される) Jqueryのajaxでは、クッキー無効の環境でのセッションやり取り自体が出来ないのでしょうか。

tomatocot
質問者

補足

session.use_only_cookiesを0、session.use_trans_sidを1に設定してみましたが、 セッション渡しが出来ていない様です。

回答No.1

>しかし、ブラウザのCookieを無効(ブロック)に設定した場合のみ、$_SESSION["data"]の中には なに当たり前の事言っているの? セッションってクッキー(セッションID保持のため)使っているの知らないの?

tomatocot
質問者

補足

知っています。 クッキーが使えない環境の場合はURLでセッションIDを受け渡す仕組みの筈ですが、 session.use_only_cookiesを0、session.use_trans_sidを1に設定してみても、セッション渡しが出来ていない様です。

関連するQ&A

  • jquery PHP 値 ajax

    失礼します。現在jqueryで作成した2次元配列をPHP側に渡したいのですが上手くいきません。 jquery側のコンソールで確認した際にはsuccessの処理が行われ配列の中身がjson形式で表示されるのですが、その内容をPHP側で確認しようとするとNULLが返ってきてしまいます。 何卒ご教授よろしくお願いいたします。 html側 $(function(){ // 送るデータ形式はJSONでなければ、PHP側でエラーが出る.のでJSON.stringify()でJSON形式に変換 send_data= JSON.stringify(data); // 送信処理 $.ajax({ url: "ajax.php", // 送信先のPHP type: "POST", // POSTで送る contentType: "Content-Type: application/json; charset=UTF-8", //必須ではなさそうだが、サーバ側との整合のために明示しておいた方がよい。 // dataType: 'json', //受信形式 必須ではなさそうだがサーバ側との整合のために明示しておいた方がよい。 data:send_data //JSON形式の送信データ }).success(function(data, status, xhr) { // 通信成功時の処理 console.log("success"); console.log("data ="+data); console.log("status ="+status); console.log("xhr ="+xhr); }).error(function(xhr, status, error) { // 通信失敗時の処理 console.log("error"); }).complete(function(xhr, status) { // 通信完了時の処理 console.log("fin"); }); }) }) PHP側 二通り試してみました。 <?php //php://inputはPOSTの生データを取得できる $json = file_get_contents("php://input"); //JSON形式データをPHPの配列型に変換 $data = json_decode($json); var_dump($data) ; //POSTできたデータを格納 $hoge = $_POST['data']; var_dump($hoge);

    • ベストアンサー
    • AJAX
  • jQueryでajax

    ajax(jQuery使用)を使った以下のサンプルは、 セレクトボックスを選択すると、ボタンを表示するのですが、 そのボタンをクリックしても、アラート(This is success!)が表示されません。 ajaxで吐き出した<button>ボタン</button>のボタンのクリックイベントが 検知しないような感じですが、いったいどこが間違っているのかわかりません。 どなたか、ご教授いただけると助かります。 htmlソース ------------------------------------------- <meta http-equiv="content-script-Type" content="text/javascript" /> <meta http-equiv="content-style-Type" content="text/css" /> <link rel="stylesheet" href="./photo.css" media="all" /> <title> テスト</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $("button").click(function() { alert("Test is success!"); }); $(".first").change(function() { var param = ''; $.ajax ({ type: "POST", url: "ajax.php", data: param, cache: false, success: function(res) { $("#result").html(res); } }); }); }); </script> </head> <body> <select name="first" class="first" id="first"> <option value="1">項目1</option> <option value="2">項目2</option> </select> <p>結果:</p> <div id="result" style="width:808px;"></div> </body> </html> phpソース ---------------------------------------- <?php echo '<button>ボタン</button>'; ?>

    • ベストアンサー
    • AJAX
  • JS(ajax)でphp(csv)の読み込み

    こんにちは。 Javascriptのご教授お願いしたく、書き込みました。 今JavascriptでAjaxを使って、CSVを読み込むPHPを実行しています。 PHPでは、CSVを読み込み(readcsv.php)、その結果を別のファイル(alert.html)に受け渡しています。 問題が、読み込んでいるJavascript側でもデータを一つ一つ取得したいですが、 方法が分かりません。ご教授お願いします。 構成 : alert.html(Javascript), readcsv.php, test.csv コード構成 : -------------------------------------------------------------------------- alert.html <script type="text/javascript"> $.ajax({ type: "POST", url: "readcsv.php", success: function(printString) { alert(printString); --> ここをどうするべきか悩んでいます。 }, error:function(){ alert("error"); } } ); </script> ------------------------------------------------------------------------------- readcsv.php <?php $filename = "test.csv"; $row = 1; $rowS = 1; if (($handle = fopen($filename, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, "*")) !== FALSE) { $num = count($data); $row++; for ($c=0; $c < $num; $c++) { $String = explode(",", $data[$c]); foreach ($String as $AllString) { echo $AllString."\n"; } echo "\n"; } } fclose($handle); } ?> ---------------------------------------------------------------------------- test.csv 1,2,3,4,6,8*9,1,2,3,5,7,2,1,3,5*7,2,1,2,3,5,7,2*1,5,3 ---> 数字の羅列(コンマ区切り) ---------------------------------------------------------------------------- です。 一番問題になっているところは、 alert.html の alertのところで、 readcsv.php から受け取った値を一つ一つ変数に格納したいところです。 ご教授お願いします。

  • 携帯サイト用PHPのセッションについて

    はじめまして。 携帯サイトでPHPのセッションを使ってリンク先の【Location:】内にURL情報を埋め込みたいのですが、「携帯ではクッキーがつかえない」「【session.use_cookies】と【session.use_trans_sid】の設定で使えるようになる。」と見たので試しているのですがうまくいきません。助けてください。 今試してみている記述内容は下記となっています。 ・記述内容: >>test_a/1.php <?php ini_set("session.use_cookies","0"); ini_set("session.use_trans_sid","1"); session_start(); $_SESSION['test'] = "http://xxx.xx/test_a/"; header("Location:http://xxx.xx/test_b/2.php? .session_name().'='.session_id()."); exit; ?> >>test_b/2.php <?php ini_set("session.use_cookies","0"); ini_set("session.use_trans_sid","1"); session_start(); echo "セッションは" .$_SESSION['test']; ?> 試しに"echo"で表示させてみたところ、PCでは「セッションはhttp://xxx.xx/test_a/」と表示されるのですが、携帯(FOMA F904i)では「セッションは」しか表示されません。 どなたか、よろしくお願いします。

    • 締切済み
    • PHP
  • とあるAJAXでの値の受け取り方について

    PHPはわかりますが、JSはまったくの初心者です。 こちらのサンプルでAJAXの練習中です。 http://www.imztry.net/dhtml/027/027-2.html 動作はするんですが、その値をどうすればフォームとして($_POST)で 受け取ることができるのか、お力をお借りしたいと思います。 「save」ボタンを押すと、下のほうにメッセージが流れます。 box3|node17; box3|node18; の値をPOSTデータで送りたいんですが、どうもうまくいきません。

  • ajax + PHPによるエラーの返し方について

    エラーが戻ってこず困っています。 質問させてください。 ■質問内容 以下の記載の、【url: "./ajax_upd_user.php",】内部にて 任意のエラーコードを返し、【error: function(){】へ遷移するようにしたい。 ■現状 【ajax_upd_user.php】で任意のPHPの「throw new exception」を返しても successになってしまう。。。 ■ソースコード一部 ○「test.php」に以下のコードを記載 $.ajax({ type: "POST", url: "./ajax_upd_user.php", data: strData, dataType: "html", success: function(res){ $('#form_Area').oneTime(2000,function(){ $('#form_Area').unmask(); getUpdateAll(res); })}, error: function(){ $('#form_Area').unmask(); alert( "登録処理でエラーが発生しました。"); } }); お手数ですが、知っている方いらっしゃいましたら ご教授お願いいたします。 以上、よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • phpに値が送られない

    PHP側に値が送られなくて困ってます!! どなたか助けて頂けないでしょうか $(function() { $('a') .click(function() { var id = this.id; alert(id); $.ajax({ type: 'POST', dataType:'json', url:'editor_text.php', data:{ item:id }, success:function(data) { alert(data); }, error:function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); } }); }); });

    • ベストアンサー
    • AJAX
  • ajax反映後のjqueryが動かない

    色々と簡略化してますが、以下のようなajaxを交えたコードを書いています。 <script type="text/javascript"> $(function() { /* 初期変数処理 */ ............ /* HTML内object操作 */ ............ /* ある箇所をclickでイベント */ $('#hoge').click(function(e) ←(1)画面アニメーション { test3(); } /* 数秒後に(1)を自動実行 setInterval(function(){ ...... } /* formを使って検索 */ $('#form').submit(function(event) { event.preventDefault(); ........(中略) $.ajax({ type:"POST", url: "hoge.php", data:{data: data}, timeout: xxxxx, beforesend: { ........ }, complete: { ........ } success: function(data){ ......... ← (2)HTML内object操作、jquery部分は避ける test2(); } }); return false; }); function test1(){ ........ }; function test2(){ ........ }; function test3(){ ........ }; }); </script> [HTML] <form id = "form"> <input name="list"/> <button>送信!</button> </form> <div id="hogehoge"> ................. ←(3)検索で内容変更する箇所 </div> としているのですが、一度送信ボタンを押して(2)の処理を行った後、 (1)のアニメーションも含め、すべてのjquery要素が使用できなくなってしまいました。 http://semooh.jp/jquery/api/events/live/type,+fn/ によればliveを使えばclick処理はできるとありましたが、これでも動きません。 setIntervalの効果や、submitイベントすら動きませんでした。 なお、検索前は問題なく動作します。通常時は問題ないのですが、submit後からおかしいので、 ajaxに関してなにか見逃している箇所があるとは思うのですが、 どこが悪いのかはっきりと検討がついていません。 どなたかお知恵をお貸しいただけませんでしょうか。宜しくお願いします。

  • 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

  • PHPのフォームとAjaxを組み合わせたいのですが

    簡潔にコードを書かせて頂きますが、PHPとjQueryによるAjaxを連携させたいと考えています。 まずform.phpのフォームをsubmitし、その内容をpost.phpへ送り、リダイレクトにてres.phpへ送るという、PHPの基本的な動きをさせますが、 その結果はres.phpという新しいページではなく、Ajaxにてform.phpの<div id="text1">部に元々書かれている<form>ではなく、res.phpの出力内容を出力したいと考えております。 この場合、どのようにjQueryコードを記述すればいいのでしょうか? 色々考えて試してみたのですが、上手くいきませんでした。 自分はform.php、post.php、res.phpという3つのファイルを用意していますが、もしかしたらori.phpという出力用のファイルを用意し、その<div>空間内にform.phpのフォームやres.phpの結果をAjaxによって出力するのかなとも思いましたが、良く分かりませんでした。 アドバイス頂けないでしょうか? 宜しくお願い致しします。 (( form.php )) <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text1"> <h2>その1</h2> <form action="post.php" method="POST" id="form" name="form" > <input type="checkbox" id="news" name="news" value="news" /> ニュース <br /> <input type="submit" name="submit" value="submit" /> <input type="reset" name="reset" value="reset" /> </form> </div> </body> </html> (( post.php )) <?php session_start(); session_regenerate_id(TRUE); $_SESSION["news"] = "news 表示"; $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra = 'res.php'; header("Location: http://$host$uri/$extra"); (( res.php )) <?php session_start(); session_regenerate_id(TRUE); ?> <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text2"> <h2>その2</h2> <?php $_SESSION["news"]; ?> </div> </body> </html> <?php session_destroy(); $_SESSION = ''; ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう