私は 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 パラメータをプッシュするには何が必要ですか?