【问题标题】:JSON string in ajax post request content-type application/formdata vs application/jsonajax 发布请求内容类型 application/formdata 与 application/json 中的 JSON 字符串
【发布时间】: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 声明内容类型。

标签: php ajax json


【解决方案1】:

如果您希望通过服务器端的单个变量访问所有数据,您需要执行以下操作:

JS:

$.ajax({
        type: "POST",
        url: "xyz.php",
        data: {'data', JSON.stringify(response)},
        dataType: "html",
        success: function (result) {}
    });

PHP:

$a = json_decode($_POST['data'], true);

【讨论】:

  • 那么 contentType 的用途是什么。意味着我可以设置任何类型或不设置类型并以我想要的方式访问数据?
  • 也许其他人可以更好地理解当前被认为是“最佳实践”的内容,但通常情况下,您不需要在使用 $.ajax 时明确设置 contentType
  • 我在网上看过,如果我们不指定任何 contentType 它将使用默认的 application/form-data 那么...
  • 我的理解是这不会有问题。如果您需要在服务器端进行一些检查,您可以设置内容类型,但此代码应该可以正常工作。
猜你喜欢
  • 2019-08-01
  • 2012-12-16
  • 2015-09-07
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 2017-10-21
  • 2018-03-22
相关资源
最近更新 更多