0

.php ファイルから Javascript にパラメーターを送信しようとしていますが、文字列を送信することさえできません。

Javascript フラグメント:

var params = "action=getAlbums";
            var request = new XMLHttpRequest();

            request.open("POST", PHP CODE URL, true);
            request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            request.setRequestHeader("Content-length", params.length);
            request.setRequestHeader("Connection", "close");
            request.send(params);

            request.onreadystatechange = function() {

                   var phpmessage = request.responseText;
                   alert(phpmessage);

            };

PHP フラグメント:

$deviceFunction = $_POST["action"];
if ($deviceFunction == "") $deviceFunction = $_GET["action"];

// Go to a function depending the action required
switch ($deviceFunction)
{
    case "getAlbums":
        getAlbumsFromDB();
        break;
}



function getAlbumsFromDB()
{

    echo "test message!";

}

phpmessage を含むアラートがポップアップしますが、空です (実際には 2 回表示されます)。これを行うと、アラートは機能しません。

request.onreadystatechange = function() {
                if(request.status == 200) {
                    var phpmessage = request.responseText;
                   alert(phpmessage);
                }

            };
4

3 に答える 3

1

readystatenchange状態が変化するたびにイベントが呼び出されます。5 つの状態があります。こちらを参照してください: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#readyState

JS を書き換えます。

request.onreadystatechange = function () {
  if (request.readyState == 4) {
    console.log('AJAX finished, got ' + request.status + ' status code');
    console.log('Response text is: ' + request.responseText);
  }
}

コードでは、返されたステータス コードのみを確​​認します。上記のコードは、準備完了状態を確認してから、デバッグ用のステータス コードを出力します。

この回答は、実際の質問に対する回答というよりもコメントであることはわかっていますが、適切にフォーマットされたコードを含めるために回答を書いていると感じました。

于 2013-11-01T13:15:09.843 に答える
0

Djangoで同様の問題に直面しました。私がしたこと: テンプレート言語を使用して、必要な JavaScript 変数を生成しました。

私は PHP プログラマーではありませんが、アイデアを提供するつもりです。以下は php コードではなく、図解用です。

<?php
    <script type="text/javascript" ... >
          SOME_VARIABLE = "{0}".format(php_function())  // php_function resolve the value you need
   </script>
?>

スクリプトで SOME_VARIABLE を使用しています。

于 2013-11-01T13:20:49.550 に答える
0

open メソッドと send メソッドを呼び出す前に、onreadystatechange イベント ハンドラを指定してください。また、リクエストに対して GET メソッドと POST メソッドのどちらかを選択する必要があります。

リクエスト オブジェクトのステータスが OK (=200) で、readyState が終了し、レスポンスの準備ができている (=4) 場合にのみメッセージをポップアップ表示する場合は、次のように記述できます。

request.onreadystatechange = function() {
    if (request.readyState==4 && request.status==200) {
        var phpMessage = request.responseText;
        alert(phpMessage);
    }
};
于 2013-11-01T13:35:19.843 に答える