首页 > 解决方案 > 不要在 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);;
 }

标签: php

解决方案


如果您将数据作为字符串传递,它应该是 URL 编码的,而不是 JSON 的字符串表示:SubGroup=...&FlowerColor=...

您还可以将数据作为对象传递:

data: {SubGroup: 'mygroup', FlowerColor: 'mycolor'}

来自JQuery 文档

处理数据(默认值:true)

类型:布尔值

默认情况下,作为对象(从技术上讲,不是字符串)传入 data 选项的数据将被处理并转换为查询字符串,适合默认的内容类型“application/x-www-form-urlencoded” . 如果要发送 DOMDocument 或其他未处理的数据,请将此选项设置为 false。


推荐阅读