$ _POST变量为空

时间:2015-04-04 05:35:07

标签: javascript php ajax post

我使用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);

然而所有这些都给了我一个空数组。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

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

使用,

req.send("name=James"); 

答案 1 :(得分:0)

$_POST仅填充表单编码和多部分编码数据。您的数据已编码为JSON,应通过php://input访问(根据this question)。

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

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

答案 2 :(得分:0)

除了行req.setRequestHeader("Content-Type", "application/json");应位于req.open("POST", 'functions.php', true);之外,因为必须打开XHR对象的状态才能设置标题,因此您的代码完全正常运行。

你的问题出在其他地方。

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

检查php.ini的解释参数的最佳方法是使用<?php phpinfo(); ?>执行空的.php文件并启动它;然后查看&#34;核心&#34;部分。