这个问题几乎与一年未回答的问题相同:
HTTP-POST XHR not working in chrome
我希望找到一个解决方案,并提供比原始问题更多的细节。
背景
我有一个服务器端的PHP脚本应该从表单或XHR请求中获取POST数据。当我使用提交表单测试网站时,它适用于Chrome和IE9。但是,当我使用XHR生成请求时,在客户端使用Chrome时,未定义php POST变量。这种行为是不一致的:在20次尝试中大约有1次,php确实接受了数据。
我检查了php://input
流,看到在所有情况下都将帖子数据发送到服务器;请注意,测试用例之间的一小部分HTTP标头($_SERVER
)不同。
代码
服务器端:
<?php
echo file_get_contents("php://input") . "\n";
print_r($_SERVER);
print_r($_POST);
?>
客户端表单版本(Chrome和IE9都可以使用)
<form action="scriptName.php" method="post">
Field: <input type="text" name="myField"><br>
<input type="submit" value="Submit">
</form>
客户端XHR版本(IE9始终有效,Chrome工作时间约占5%)
<script>
function postToURL(url,data)
{
// Typical XHLHttpRequest declarations are removed for brevity
// - checks browser type and declares xmlhttp accordingly
// - defines a onreadystatechange handle
xmlhttp.open("POST",url,false);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(data);
}
</script>
...
<form>
<button type="button" onClick="postToURL('scriptname.php','myField=test');">
Test
</button>
</form>
输出
在所有情况下,请求正文数据(php://input
)都返回相同的值。
标题大致相同,但Chrome在XHR模式中添加[HTTP_PRAGMA] => no-cache
{+ 1}}变量定义为$_POST
,Chrome + XHR除外。
问题
问题可能发生在哪里? HTTP标头可能有问题,或者我应该看服务器端。有什么想法吗?
答案 0 :(得分:1)
将此代码放在页面的第一行
<?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 -->
我希望能帮到你