我使用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文件并启动它;然后检查"核心"部分。