[英]Sending data to PHP with XMLHttpRequest (vanillaJS) and reading that in php with $_POST? Undefined
我有一个Javascript函数,该函数从HTML获取参数。
function find(customer) {
data = {"key":customer};
console.log(data);
var xhr = new XMLHttpRequest();
var url = "test.php";
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xhr.send(data);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
console.log(xhr.responseText);
}
};
}
日志产生正确的信息,即
{key:"103"}
然后在PHP中,我试图像这样访问此数据:
if (isset($_POST['data'])) {
$number = $_POST['data'];
}
echo $number;
但是,PHP向我抛出了一个错误:
注意:未定义的索引:第22行中。\\ test.php中的数据
这意味着if(isset($ _ POST ['key'])返回的是false,但我不确定为什么。我可以使用Ajax找到很多信息,但没有太多关于使用标准Javascript的指导。
编辑:
根据评论将$_POST['data']
更改$_POST['data']
$_POST['key']
。
现在接收变量错误(未定义),而不是索引错误。
注意:未定义的变量:第22行..test.php中的数字
这是您要发送的:
data = {"key":customer}; xhr.send(data);
…但是当该对象转换为字符串时,将得到: [object Object]
并且实际数据丢失。
你说:
xhr.setRequestHeader('Content-Type','application / x-www-form-urlencoded; charset = UTF-8');
哪个声称您正在将application/x-www-form-urlencoded
数据发送到服务器。
您需要转换data
,使其与您声明的内容类型匹配。
此外,如果您在一个地方叫您的密钥data
而在另一个地方您称它为key
。 您必须始终使用相同的名称。
您的key
实际上是key
而不是data
:
data = {"key":customer};
所以改变:
if (isset($_POST['key'])) {
$number = $_POST['key'];
}
echo $number;
但是,如您所见, $number
仅在if
条件中定义。 因此,您可以定义一个默认值
if (isset($_POST['key'])) {
$number = $_POST['key'];
} else {
$number = 0;
}
echo $number;
正如Quentin所指出的那样,您是在告诉服务器您发送的数据是application/x-www-form-urlencoded
而不是。 您可以 :
application/x-www-form-urlencoded
。 xhr.send(new URLSearchParams(data))
[查看犬数据 ] $_POST
,使用简单的JSON.stringify(data)
将数据编码为JSON字符串,并告诉服务器您正在发送JSON( xhr.setRequestHeader("Content-Type", "application/json")
,然后获取$data = json_decode(file_get_contents('php://input'), true);
数组$data = json_decode(file_get_contents('php://input'), true);
尝试var_dump($ _ POST); 出口; 并且您将看到POST数组中没有任何数据密钥,而是具有“密钥”密钥,因此可以用$ _POST ['key']代替$ _POST ['data']
尝试先打印所有发布数据,您将获得要发布的实际名称
print "<pre>";
print_r($_POST);
在您的PHP代码中,这将输出带有实际参数名称的已发布数据,而您只是使用该参数而不是$_POST["data"]
我假设您具有$_POST["key"]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.