gpt4 book ai didi

javascript - 通过 AJAX 发送 JSON 时的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 09:30:07 25 4
gpt4 key购买 nike

我在通过 AJAX 发送 JSON 时遇到了一些非常奇怪的行为。

JSON 数据:

data = {
"name": "box1",
"comment": ["fragile"],
"type_A": [
{
"item": "1",
"attr": [
"big",
"red"
]
},
{
"item": "2",
"attr": [
"small",
"red"
]
},
],
"type_B": [],
"misc": {}
};

POST 请求:

$.ajax({
url: url,
type: "POST",
// data: JSON.stringify(data),
data: data,
success: function (result) {
console.log("inside success");
},
error: function (error) {
console.log("inside error");
}
});

如果我在此处传入 data 而没有 JSON.stringify(),则空字段 type_Bmisc迷路/被剥夺。但是,如果我确实使用了 JSON.stringify(),那么如果没有 JSON.parse(),后端将无法正确解析它。有没有办法在后端不执行 JSON.parse() 的情况下不删除空字段?

我尝试将 contentType: "application/json"dataType: "json" 添加到请求中,但没有帮助。

最佳答案

您标记为“JSON 数据”的内容不是 JSON。它是一个 JavaScript 对象字面量。它是 JavaScript 源代码的一部分。它不是 JSON 数据文件。

当您使用 jQuery 的 Ajax 函数时,您可以将一些不同的东西传递给 data

如果您向它传递一个对象,那么 jQuery 将对其进行 Form URL 编码。

除了一组扁平键=值对之外,URL 编码数据没有任何标准方式来表示任何内容。

PHP 引入了一个扩展,它允许您通过在键名称中使用方括号来表达数组和关联数组。例如:

array[]=item1&array[]=item2

数组中的每一项都由键的副本表示。

如果您没有项目,则没有该名称的键。

如果你使用这种编码数据的方法,那么你就不能表达空数组。最接近的是拥有一个包含零长度字符串的数组。

如果您向它传递一个字符串,那么 jQuery 将按原样发送它。

使用 JSON.stringify 会将您的对象转换为包含 JSON 数据的字符串。

JSON 能够表达空数组。

但是,PHP 不会自动解析 JSON 格式的请求。

所以……

Is there a way to not strip away empty fields without doing a JSON.parse() in the backend?

没有。没有。您要么使用不支持空字段的格式,要么使用 PHP 不会自动为您解析的格式。

I tried adding contentType: "application/json"

这会告诉服务器您发送的数据已编码为 JSON。如果您要发送 JSON,那么您应该包含它。

它不会改变您发送的数据。您需要自己将数据编码为 JSON。

and dataType: "json" to the request but didn't help.

这告诉服务器您希望对包含 JSON 的请求的响应。它还告诉 jQuery 忽略响应的内容类型并将其解析为 JSON,无论服务器说它是什么。

它对您发送的数据没有影响。

关于javascript - 通过 AJAX 发送 JSON 时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46836826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com