0

私は XMLHttpRequest を使おうとしている初心者です。私は、インターネット上に散在する数多くの例を研究してきました。GETメソッドを使えば問題ないのですが、POSTに切り替えようとするとパラメータの転送に失敗します。:(

問題を再現する私の簡略化された例を次に示します。

Javascript:

function GetPostTest(url)
{
  var req       = null;
  var postParms = 'p1=x&p2=y';
  var getParms  = '';
  getParms = 'g1=a&g2=b';
  if ( getParms )  url += '?'+getParms;
  req = new XMLHttpRequest
  if ( req )
  {
    req.open( 'POST', url, true );
    req.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
    req.setRequestHeader( "Content-length", postParms.length );
    req.setRequestHeader( "Connection", "close" );
    req.onreadystatechange = function()
    {
      if ( req.readyState == 4 && req.status == 200 )
      {
        alert( 'Got Stuff Back: ' + req.responseText );
      }
    }
    req.send( postParms );
  }
}

サーバ:

<?php
foreach ( $_POST as $key=>$value )      echo htmlspecialchars(' _POST['.$key.']=['.$value.']');
foreach ( $_GET as $key=>$value )       echo htmlspecialchars(' _GET['.$key.']=['.$value.']');
foreach ( $_REQUEST as $key=>$value )   echo htmlspecialchars(' _REQUEST['.$key.']=['.$value.']');
exit;
?>

この例では、サーバーは受け取ったすべての GET および POST パラメーターを報告するだけで、アラート ボックスに表示されます。そこにもいくつかの GET パラメータを投入しました。私が渡すパラメータは次のとおりです。

  • 取得: g1=a&g2=b
  • PUT: p1=x&p2=y

アラート ボックスには、「Got Stuff Back: _GET[g1]=[a] _GET[g2]=[b] _REQUEST[g1]=[a] _REQUEST[g2]=[b]」と表示されます。これは、サーバーに正常に送信され、正常に戻ってきていることを示していますが、POST 変数が通過していないということだけです。

getParms をオフにして、POST パラメーターのみを送信すると、変数が表示されなくなります。サンプル コードで見られる 3 つの setRequestHeader() の組み合わせまたはその他のバリエーションを無効にしましたが、何も変わりません。

Google Chromium バージョン 24.0.1312.56 Ubuntu 11.10 (24.0.1312.56-0ubuntu0.11.10.1) と Xubuntu 2.2.20-1ubuntu1.3 で PHP を使用して Apache をテストしています。

分析していただきありがとうございます。これを修正して POST パラメータをプッシュするには何が必要ですか?

4

1 に答える 1

0

あなたのコードをコピーして試してみたところ、うまくいきました。

于 2013-03-07T01:24:12.500 に答える