使用Chrome+;时未定义PHP POST变量;XHR

使用Chrome+;时未定义PHP POST变量;XHR,php,javascript,google-chrome,xmlhttprequest,Php,Javascript,Google Chrome,Xmlhttprequest,这个问题与一年前未回答的问题几乎相同: 我希望找到一个解决方案,并能提供比原来问题更多的细节 背景 我有一个服务器端php脚本,应该从表单或XHR请求获取POST数据。当我使用提交表单测试站点时,它在Chrome和IE9中工作。但是,当我使用XHR生成请求时,在客户端使用Chrome时,php POST变量是未定义的。这种行为是不一致的:大约20次尝试中有1次,php接受数据 我已经检查了php://inputstream并查看post数据在所有情况下都被发送到服务器;请注意,测试用例之间有少

这个问题与一年前未回答的问题几乎相同:

我希望找到一个解决方案,并能提供比原来问题更多的细节

背景

我有一个服务器端php脚本,应该从表单或XHR请求获取POST数据。当我使用提交表单测试站点时,它在Chrome和IE9中工作。但是,当我使用XHR生成请求时,在客户端使用Chrome时,php POST变量是未定义的。这种行为是不一致的:大约20次尝试中有1次,php接受数据

我已经检查了
php://input
stream并查看post数据在所有情况下都被发送到服务器;请注意,测试用例之间有少量HTTP头(
$\u SERVER
)是不同的

代码

<?php ob_start(); error_reporting(E_ALL & ~E_NOTICE & ~8192); ?>
<!-- Ignore Errors , Header Sent Report -->
<!-- Ignore Header Sent Error -->
<?php ob_flush(); ?>
<!-- Ignore Header Sent Error -->
服务器端:

<?php
   echo file_get_contents("php://input") . "\n";
   print_r($_SERVER);
   print_r($_POST);
?>

客户端表单版本(Chrome和IE9都可用)


字段:
客户端XHR版本(IE9始终有效,Chrome大约有5%的时间有效)


函数postToURL(url、数据)
{
//为了简洁起见,删除了典型的XhlhtPrequest声明
//-检查浏览器类型并相应地声明xmlhttp
//-定义onreadystatechange句柄
open(“POST”,url,false);
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
发送(数据);
}
...
试验
输出

在所有情况下,请求主体数据(
php://input
)返回相同的值。 标题基本相同,但Chrome在XHR模式下添加了一个
[HTTP\u PRAGMA]=>无缓存

$\u POST
变量定义为
[myField]=>test
,Chrome+XHR情况除外

问题


问题可能发生在哪里?HTTP头是否可能有问题,或者我应该查看服务器端。有什么想法吗?

将此代码放在页面的第一行

<?php ob_start(); error_reporting(E_ALL & ~E_NOTICE & ~8192); ?>
<!-- Ignore Errors , Header Sent Report -->
<!-- Ignore Header Sent Error -->
<?php ob_flush(); ?>
<!-- Ignore Header Sent Error -->

并且此代码位于页面的最后一行

<?php ob_start(); error_reporting(E_ALL & ~E_NOTICE & ~8192); ?>
<!-- Ignore Errors , Header Sent Report -->
<!-- Ignore Header Sent Error -->
<?php ob_flush(); ?>
<!-- Ignore Header Sent Error -->


我希望这对您有所帮助

何时调用
postToURL()
它是从按钮
onClick
事件调用的。您能告诉我们吗?
[HTTP\u CONTENT\u LENGTH]
头在所有情况下都是相同的(12时
myField=test
)。我将尝试手动定义它,看看这是否会改变行为。@ithcy:很高兴知道它不是一个通用的Chrome bug。我要测试的环境有限。我使用的是Chrome23.0、PHP5.4.10W/内置开发web服务器。我可以升级到24.0测试版,看看会发生什么;我开始觉得问题是服务器端的。