基本的な質問:具体的には、$_POST変数と$_GET変数はいつ設定されますか?私が尋ねる理由は以下に説明されています。
事前開示:ここで共有しているファイルは、テスト/学習を目的としたものであり、有用なものを実現することを目的としたものではありません。この1つの質問を、私が取り組んでいるプロジェクトの他の詳細から分離するために作成しました。
これが私がやろうとしていることの要約です:私はフォームからjavascript関数を呼び出します
<form action="javascript:jsTest()" ... />
次に、jsTest()内から、php関数phpTest()の戻り値に基づいてjavascript変数を割り当てます。
var jsVar = <?php echo json_encode(phpTest()); ?>;
関数phpTest()は、単に$_POST変数を返します。
return $_POST['testName'];
完全なコードは次のとおりです。
<?php
session_start();
function phpTest() {
return $_POST['testName'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>javascript/php test</title>
<script type="text/javascript">
function jsTest() {
var jsVar = <?php echo json_encode(phpTest()); ?>;
alert(jsVar);
}
</script>
</head>
<body>
<form method="POST" name="testForm" action="javascript:jsTest()">
<input type="text" name="testName" value="username" />
<input type="submit" value="submit" />
</form>
</body>
</html>
問題:アラートは常に表示されますnull
。
私はこれを2つの方法でテストしました。1)代わりにフォームアクションを別の.phpファイルに設定すると、フォーム入力フィールドに関連付けられた$ _POST変数が設定され、それらの$_POST値のそのファイル内のエコーがブラウザーに表示されます。または、2)代わりにphpTest()から単純な文字列を返す場合は、
return 'hello kitty';
次に、javascript alert()は、返された文字列を正確に表示します。したがって、$_POST変数がまだ設定されていないと想定しても安全だと思います。それは私が答えを見つけることができなかった質問に私をもたらします:
$ _POST変数はいつ正確に設定されますか?これはページのリロード前(私のアプローチでは必要)であると想定しました。コードでmethod = "GET"を代わりに使用すると、事前のページのリロードなしでGET変数がURLに追加されるのがわかります。
前もって感謝します。
クリス