出産前後の痔にはご注意!

jQueryの$.postにてPHPファイルをリクエストしています。
Ajax→PHPの処理後、Ajaxに処理が戻る際にPHPからAjaxに
値を受け渡し、さらにその値によってAjaxの処理を条件分岐させたい場合
どのような記述になるのでしょうか。
PHPからの戻り値は単なるテキストかtrue/falseで考えています。

それとも、そもそも$.postでは戻り値を処理する、
といった事はできないのでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> なお、例えばPHPから配列データをAjaxに返す場合


> それをAjaxで参照するとなると、どのようになるのでしょうか。

Ajax では、基本的には「テキストデータ」でしかデータのやりとりは出来ません。
そのため、PHP 側で配列データをテキストデータに変換し、JavaScript側でテキストデータを配列データに戻す、といった処理が必要になります。
元々、その「テキストデータ」フォーマットとしては XML が想定されていたのですが(AjaxのX)、複雑でオーバーヘッドが大きいので、最近はJSONが使われる場合が多いです。

http://gihyo.jp/dev/feature/01/jquery-ajax/0002

PHP側については、PHP 5.2.0 以降なら、json_encode で、配列をJSON形式に変換できます。
http://php.net/manual/ja/function.json-encode.php

jQuery の Ajax ライブラリは、JSON に対応していますので、
$.post の第4引数を"json"にしておけば、
PHP側でJSON形式に変換した配列データを、
JavaScript側の$.post のcallback内では、引数 data がそのまま配列としてアクセス出来るようになります。

jQueryとPHP のJSONによる受け渡し例は、
http://www.rottel.net/kuwa/44111
なんかが参考になるでしょうか。
    • good
    • 0

$.ajax で、引数 async を false にしてリクエストを発行すれば、


関数呼び出し後に、リクエスト結果に基づいた条件分岐は可能です。
http://semooh.jp/jquery/api/ajax/jQuery.ajax/opt …

ただし、リクエストを発行したあと、応答が戻ってくるまで
スクリプト動作が止まってしまうため、操作性の問題からは
あまりオススメできません。

できれば、その処理そのものはそこで終わらせておき、
続きは $.post の callback内に記述すべきでしょう。
---ここから---
$.post("test.php",arg, function(data, status) {
// 通信成功後の処理
if (data == "true") {
PHP出力が「true」だった時の処理
} else {
そうでない時の処理
}
続きの処理
}, "text");
// ここから下には何も書かない。続きは上述のコールバック内に書く
---ここまで---
といった感じで。

この回答への補足

有り難うございます。

仰るとおりコールバックで実現できそうです。
なお、例えばPHPから配列データをAjaxに返す場合
それをAjaxで参照するとなると、どのようになるのでしょうか。

引き続き教えて頂けますと助かります。
宜しくお願い申し上げます。

補足日時:2010/02/03 10:38
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qリンクをクリックした時にformからPOST送信したい。

HTML、PHP、JavaScript等でサイトを作っているのですが・・・。

【実現出来ている例】
<form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">
 <input type="submit" value="送信">
</form>
 submitボタンを一つ置いて、それがクリックされた場合に
formの内容をPOSTで送信する。

【実現したい例】
<form name="form1 method="post">
 <a href="Next.php" onClick="???">???</a>
</form>
 formの中のリンクをクリックされた場合に、formの内容を
POSTで送信したいのですが、その実現方法がわかりません。
GETで送るという手もあり得ますが、今回はどうしてもPOST
したいのですが。

Aベストアンサー

<form name="form1" method="post" action="Next.php">
<a href="#" onClick="document.form1.submit();">???</a>
</form>

onclick内の対象がform1としてあてているので、
アンカータグは別にform内に記述しなくても大丈夫です

form内にhidden等でnameとvalueを持ったパラメータがあればそれも送られます

アンカータグから動的にvalueを変更したい場合は、
document.form1.hogename.value = 'hoge';
等をsubmit()の前に行えば可能です

ただしform内に
<input type="hidden" name="hogename" value="">
を記述する等、変更先パラメータの元を用意する必要がありますのでご注意下さい

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。

Qjavascriptでセッションを取得

javaのsession.setAttribute()でセットした値をjavascriptで取得することは可能なのでしょうか?
可能であれば、手法を教えていただければと思います。
よろしくお願いします。

Aベストアンサー

セッションIDの保存はcookieかURLに連結する方法しか有りませんから、
JavaScriptでdocument.cookieや<a href="">を解析するなどしてセッションIDを取得することは可能だと思います。

セッションIDとセッションの値・内容との関連づけはサーバーで行われていますから、
その値を取得するにはAjaxなどで読み込むとかしないと無理だと思います。

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

Q連想配列からの値の取り出し

お世話様です。

タイトルにもありますが連想配列を作成した後(以下に記述例)に
その配列からキーを指定して値を取得したいと思っております。
array_keys関数だと値を指定してキーを取得するみたいで
うまくいきませんでした。
何かよい方法ありませんでしょうか?

//配列に格納
while (条件) {
  $aParaOra += array((キー) => (値));
}

Aベストアンサー

解答番号No.1の者です。

ちなみに、キーの指定なしで全部取得するのであれば、
array_values($aParaOra)
で、配列化されたものが返ってきます。

もしくは、以下のようにforeachでループすれば、
キーと値を分離して取得できます。
foreach ($aParaOra as $key => $value) {
# $aParaOra[$key]の値が、$value
}

質問者さんが何をしたいのかがいまいちピンときません。

QajaxでPHPにPOST送信して結果データを受信しようとしていますがうまくいきません。

セレクトボックスの値を受け取りPOST送信
<HTML側>
function SelValue(){
var x = $('#category1').val();
$.ajax({
type: "POST",
url: "category.php",
data: {"prm":x},
dataType: "json",
success: function(data, status){
alert(data.address1 + data.address2);
},
error: function(XMLHttpRequest, status, errorThrown){
alert("エラーが発生しました!");
}
});
}

以下category.php
if(!$_POST)
header("Location: input.php");
$CATEGORY2 = array(
1 =>array(
1 => "a",
2 => "b",
3 => "c",
),
2 => array(
1 => "d",
2 => "e",
3 => "f",
),
3 => array(
1 => "g",
2 => "h",
3 => "i",
),
);
$ary = array();
if($_POST["prm"]){
for($i=1;$i<=3;$i++){
foreach($CATEGORY2[$i] as $key => $value){
if($key == $_POST["prm"])
$ary = $CATEGORY2[$i];
}
}
}
json_encode($ary);
としています。
PHPにPOSTしたデータも確認できないし
jsonデータを表示できないです。
どのようにしたらいいかわかりません。
ajax初心者でわからないことだらけです。
教えてください。

セレクトボックスの値を受け取りPOST送信
<HTML側>
function SelValue(){
var x = $('#category1').val();
$.ajax({
type: "POST",
url: "category.php",
data: {"prm":x},
dataType: "json",
success: function(data, status){
alert(data.address1 + data.address2);
},
error: function(XMLHttpRequest, status, errorThrown){
alert("エラーが発生しました!");
}
});
}

以下category.php
if(!$_POST)
header("Location: input.php");
$CATEGORY2 = array(
1 =>array(
1 => "a",
2 =...続きを読む

Aベストアンサー

No1 回答の補足(確認)です。
・jQueryライブラリーを使っているのですよね。
・var x = $('#category1').val();で、セレクトボックスで選んだ
 value値がxにきちんと取れてますよね。(xは"1"か"2"か"3"のはず)
 ※この部分があやしそうですが、ご提示の部分だけではわかりかねます。
  x="1";とかしてまずテストしてみて下さい。
・url: "/php/category.php",はurl: "category.php",に戻し忘れました。
・ご提示のalert(data.address1 + data.address2);ですが、
 address1とかaddress2はどこにも登場していません。いきなり出てきてます?


人気Q&Aランキング