$_POST变量为空

$_POST variable is empty

本文关键字:变量 POST      更新时间:2023-09-26

我使用json在Javascript中创建了一个ajax请求,但$_POST变量为空。

var userid = "james";
var score = 200; 
var jsondata = {
userid: userid,
score: score
};
data = JSON.stringify(jsondata);
req = new XMLHttpRequest();   
req.setRequestHeader("Content-Type", "application/json");
req.open("POST", 'functions.php', true);
req.send(data); 

我的functions.php文件如下所示:

print "CONTENT_TYPE: " . $_SERVER['CONTENT_TYPE'] . "<BR />";
$data = file_get_contents('php://input');
print "DATA: <pre>";
var_dump($data);
var_dump($_POST);
var_dump($_GET);

然而,所有这些都给了我一个空数组。有什么需要帮忙的吗?

我认为您发送的数据不正确,

使用,

req.send("name=James"); 

$_POST仅用于表单编码和多部分编码的数据。您的数据被编码为JSON,应该通过php://input访问(根据这个问题)。

$data应该包含JSON。如果没有,则可能是由于您未能设置请求的Content-Type标头

req.setRequestHeader("Content-Type", "application/json");

除了req.setRequestHeader("Content-Type", "application/json");行应该在req.open("POST", 'functions.php', true);下,因为XHR对象的状态必须是打开的才能设置标头,您的代码完全可以操作。

你的问题在其他地方。

  • 如何检查php显示的内容
  • 你的ini conf.合适吗?尝试在file_get_contents('php://input');之前执行ini_set("allow_url_fopen", true);
  • 检查php.ini中的参数post_max_size。它应该是8M或10M(没有MB,但只有M,或者php会将其插入为0)

检查php.ini的解释参数的最好方法是用<?php phpinfo(); ?>创建一个空的.php文件并启动它;然后检查"核心"部分。