php - 不要在 PHP Web 服务中获取 json 数据
问题描述
我正在编写我的第一个 Javascript/PHP Web 应用程序。在客户端,我使用以下代码:
<script>
$.ajax({
url: "Search.php",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: '{SubGroup:"'+SubGroup+'",FlowerColor:"'+FlowerColor+'"}',
cache: false,
success: function (data) {
console.log("Back from AJAX - Success.");
// $(document).ajaxSuccess implements the success logic
},
error: function (data) {
console.log("Back from AJAX - Error.");
}
});
Web Service Search.php 在一个主要问题上完美运行。没有收到从 ajax 语句(SubGroup 和 FlowerColor)发送的数据。我正在使用下面的代码。
<?php
if (isset($_POST["SubGroup"])) {
$SubGroup = $_POST['SubGroup'];
} else {
error_log("Invalid input Received (SubGroup)");
exit;
}
奇怪的是,我用下面的代码完美地接收了其余的标题信息:
// Getting headers sent by the client.
$headers = apache_request_headers();
foreach($headers as $key => $value)
{
error_log($key . ' = ' . $value);;
}
解决方案
如果您将数据作为字符串传递,它应该是 URL 编码的,而不是 JSON 的字符串表示:SubGroup=...&FlowerColor=...
您还可以将数据作为对象传递:
data: {SubGroup: 'mygroup', FlowerColor: 'mycolor'}
处理数据(默认值:true)
类型:布尔值
默认情况下,作为对象(从技术上讲,不是字符串)传入 data 选项的数据将被处理并转换为查询字符串,适合默认的内容类型“application/x-www-form-urlencoded” . 如果要发送 DOMDocument 或其他未处理的数据,请将此选项设置为 false。
推荐阅读
- masstransit - 无法使用 MassTransit 连接到 Amazon MQ
- python - While 循环不会从嵌套的 if 语句中中断,直到操作重复两次
- python-2.7 - 检查两个熊猫数据框是否已经合并
- excel - 将数据从 excel 复制到另一个 excel 时键入不匹配错误
- php - 创建一个数组,根据 DateTime 间隔对象 php 的大小在其内部创建更小的变量数组
- git - 为什么有些提交不属于任何分支?
- java - 在java的堆空间中创建的对象如何具有全局访问权限?
- javascript - 分配一个字符串但取回一个对象 - 浏览器在玩吗?
- java - How to overwrite a jar file in a maven generated war?
- swift - Firestore 按时间排序,但按 ID 排序