1

基本的な質問:具体的には、$_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に追加されるのがわかります。

前もって感謝します。

クリス

4

1 に答える 1

1

Marc B が現在のコード例で言ったように、意図したとおりには機能しません。

$_POSTこれは PHP のスーパーグローバル配列の 1 つであるため、スクリプト全体で常に使用できますが、値がない場合があります。$_POSTPOSTDATA が HTTP POST リクエストを介して送信される場合に値を持ちます。プログラムで値を設定できますが$_POST、それはクールではありません。これまで。

スクリプトを機能させるには、POSTDATA を入力した HTTP POST リクエストを送信する必要があります。これは、cURL または Firefox の Poster プラグインを使用して行うことができます。

POST /index.php HTTP/1.1
User-Agent: curl/7.21.4 (universal-apple-darwin11.0)
Host: example.org
Accept: */*
Content-Length: 16
Content-Type: application/x-www-form-urlencoded

testName=yeahboi

HTTP 応答本文を表示できる場合は、JavaScript 変数JsVarに「yeahboi」が入力されているはずです。

スクリプトを少し更新して、HTTP POST 経由でフォームを自分自身に送信し、JavaScript 変数を設定しました。

<?php

// Script name: index.php

// Define a default value...
$name = 'unknown';

// Make sure post item 'testName' is available...
if(isset($_POST['testName']) &&
    !empty($_POST['testName'])) {

    // POST is available update name...
    $name = $_POST['testName'];
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>javascript/php test</title>
    <script>
    // wait for the DOM to be ready then update the JS variable with PHP's $name variable
    document.addEventListener('DOMContentLoaded', function() {

        var elm = document.getElementById('post-response'),
            value = '<?php echo $name; ?>';

        elm.innerHTML = value;
    }, false);
    </script>
</head>
<body>
    <div id="post-response"></div>
    <form method="POST" name="testForm" action="index.php">
        <input type="text" name="testName" value="username" />
        <input type="submit" value="submit" />
    </form>
</body>
</html>

これが少し役立つことを願っています。

于 2012-07-31T20:45:25.967 に答える