jQuery Ajax Post 更改对象结构
jQuery Ajax Post changes object structure
今天,我第一次使用 Ajax 并遇到了一个奇怪的问题。在使用 jQuery 发出 Ajax 'POST' 请求时,它会创建一些奇怪的语法。这个问题我在其他问题中没有找到答案,其实我也不知道应该找什么。
对于 Postman,我将其用作 'POST' 请求的正文:
{
"name": "t.bchuaer@test.de",
"automaticDelete": false,
"cc": {
"ccFolder": false,
"smartDelete": false,
"deletionDays": 182
},
"filters": [
{
"id": 0,
"active": false
}
]
}
当我使用 GET
获取对象(没有 Ajax)时,它 returns 正是这样。但是,当我将 POST
与 Ajax 一起使用并通过与其他对象相同的 GET
方法获取它时,我收到此消息:
{
"name": "test@tester.com",
"automaticDelete": "false",
"cc[ccFolder]": "false",
"cc[smartDelete]": "false",
"cc[deletionDays]": "182",
"id": 4
}
我的 jQuery 代码如下所示:
var emailAccount = {
"name": emailAddress.val(),
"automaticDelete": false,
"cc": {
"ccFolder": false,
"smartDelete": false,
"deletionDays": 182
},
"filters": []
};
$.ajax({
type: 'POST',
url: basicUrl + 'emails',
data: emailAccount,
success: function() {
...
},
error: function() {
...
}
});
到目前为止我尝试过的:
- 使用
dataType: "json"
- 使用
contentType: 'application/json'
(导致来自 json-服务器的 500 错误)
所以我的问题是:这是什么?
"cc[ccFolder]": "false",
"cc[smartDelete]": "false",
"cc[deletionDays]": "182"
为什么 Ajax 会这样创建它?
我这样访问代码:
function getData(path, followUp, id) {
var dataRequest = new XMLHttpRequest();
dataRequest.open('GET', basicUrl + path);
dataRequest.onload = function() {
var receivedData = JSON.parse(dataRequest.responseText)
gotEmails(receivedData)
};
dataRequest.send();
}
function gotEmails(data) {
for (i = 0; i < data.length; i++) {
var userEmailAccount = {
id: data[i].id,
name: data[i].name,
automaticDelete: data[i].automaticDelete,
cc: data[i].cc,
filters: []
};
if (data[i].filters != 'undefined') {
var filterQuery = queryBuilder("filters?", data[i].filters);
getData(filterQuery, 9, data[i].id);
}
}
}
我找到了一个可行的解决方案:
var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance
xmlhttp.open("POST", basicUrl + 'emails');
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.send(JSON.stringify(emailAccount));
而不是使用 ajax。
今天,我第一次使用 Ajax 并遇到了一个奇怪的问题。在使用 jQuery 发出 Ajax 'POST' 请求时,它会创建一些奇怪的语法。这个问题我在其他问题中没有找到答案,其实我也不知道应该找什么。
对于 Postman,我将其用作 'POST' 请求的正文:
{
"name": "t.bchuaer@test.de",
"automaticDelete": false,
"cc": {
"ccFolder": false,
"smartDelete": false,
"deletionDays": 182
},
"filters": [
{
"id": 0,
"active": false
}
]
}
当我使用 GET
获取对象(没有 Ajax)时,它 returns 正是这样。但是,当我将 POST
与 Ajax 一起使用并通过与其他对象相同的 GET
方法获取它时,我收到此消息:
{
"name": "test@tester.com",
"automaticDelete": "false",
"cc[ccFolder]": "false",
"cc[smartDelete]": "false",
"cc[deletionDays]": "182",
"id": 4
}
我的 jQuery 代码如下所示:
var emailAccount = {
"name": emailAddress.val(),
"automaticDelete": false,
"cc": {
"ccFolder": false,
"smartDelete": false,
"deletionDays": 182
},
"filters": []
};
$.ajax({
type: 'POST',
url: basicUrl + 'emails',
data: emailAccount,
success: function() {
...
},
error: function() {
...
}
});
到目前为止我尝试过的:
- 使用
dataType: "json"
- 使用
contentType: 'application/json'
(导致来自 json-服务器的 500 错误)
所以我的问题是:这是什么?
"cc[ccFolder]": "false",
"cc[smartDelete]": "false",
"cc[deletionDays]": "182"
为什么 Ajax 会这样创建它?
我这样访问代码:
function getData(path, followUp, id) {
var dataRequest = new XMLHttpRequest();
dataRequest.open('GET', basicUrl + path);
dataRequest.onload = function() {
var receivedData = JSON.parse(dataRequest.responseText)
gotEmails(receivedData)
};
dataRequest.send();
}
function gotEmails(data) {
for (i = 0; i < data.length; i++) {
var userEmailAccount = {
id: data[i].id,
name: data[i].name,
automaticDelete: data[i].automaticDelete,
cc: data[i].cc,
filters: []
};
if (data[i].filters != 'undefined') {
var filterQuery = queryBuilder("filters?", data[i].filters);
getData(filterQuery, 9, data[i].id);
}
}
}
我找到了一个可行的解决方案:
var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance
xmlhttp.open("POST", basicUrl + 'emails');
xmlhttp.setRequestHeader("Content-Type", "application/json");
xmlhttp.send(JSON.stringify(emailAccount));
而不是使用 ajax。