【发布时间】:2014-12-10 18:28:22
【问题描述】:
这可能是一个非常基本或愚蠢的问题,但它确实是一个深刻的概念问题。
如果我有一个像(客户端)这样的 ajax 发布请求:
var response = {};
response['key'] = value;
response['key2'] = value2;
$.ajax({
type: "POST",
url: "xyz.php",
data: JSON.stringify(response),
dataType: "html",
success: function (result) {}
});
在服务器端我做
$a = json_decode($data, true);
而且我可以通过 $a['abc'] 完成剩下的工作。
问题是因为我没有在 ajax 请求中将 contentType 指定为 application/json,所以 jquery 会将数据作为 application/form-data 发送,这意味着我应该通过 $_POST['data'] 访问它并且不要执行 json_decode .对吧?
Vise Versa 如果我在客户端发送内容类型为 application/json 的 json 字符串,那么在服务器端我可以通过 json_decode 而不是 $_POST [] 访问它。对吧?
我对这个基本问题感到很困惑。任何人都可以对此提供一个很好的解释吗???
注意:我的服务器返回 json 编码的数据作为回报。而且我使用苗条的框架,所以我可以访问帖子正文 $app->request->getBody();
【问题讨论】:
-
不管header如何发送,重要的是最后是一个干净的json_encode/json_decode。在您的情况下,解码过程是在您获取变量中的发布数据之后进行的。从字面上看,如果你使用 json,那么你必须相应地声明标题
-
表示没有使用 contentType 呢?
-
我已经使用 ajax 调用完成了许多项目,并且没有指定 contentType 并将 dataType 设置为 html。那么这是正确的方法吗?
-
只要代码干净,就没有问题。但是当你使用 php 文件生成 json 时,实际上你必须为 json 声明内容类型。