XMLHttpRequest到PHP服务器的POST方法没有收到POST参数,但GET很好

时间:2013-03-07 00:00:04

标签: php javascript post xmlhttprequest

我是一个尝试使用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参数。我传递的参数是:

  • GET:g1 = a&amp; g2 = b
  • PUT:p1 = x&amp; p2 = y

警告框显示:“有回填:_GET [g1] = [a] _GET [g2] = [b] _REQUEST [g1] = [a] _REQUEST [g2] = [b]”。这告诉我它发送到服务器没问题,然后回来没关系,只是POST变量没有通过。

我关闭了getParms,所以我只发送POST参数,然后我看不到任何变量。我关闭了我在示例代码中看到的三个setRequestHeader()或其他变体的任意组合,并且它不会改变任何内容。

我正在使用Google Chromium Version 24.0.1312.56 Ubuntu 11.10(24.0.1312.56-0ubuntu0.11.10.1)和Apache在Xubuntu 2.2.20-1ubuntu1.3上使用PHP进行测试。

感谢您的分析。如何解决此问题以推动POST参数?

1 个答案:

答案 0 :(得分:0)

我刚刚复制了你的代码并尝试了它,它运行得很好。