【发布时间】:2019-09-17 18:40:14
【问题描述】:
我正在尝试通过 AJAX 发送数据,而我在网上阅读的大多数地方都说我需要将其作为 JSON 发送。但是,如果我尝试将它作为 JavaScript 对象发送它实际上可以工作,而如果我尝试将它作为 JSON 发送它会给我一个 CORS 错误(但这是另一个主题:这是问题的链接:API Gateway CORS: no 'Access-Control-Allow-Origin' header (NON-PROXY))。
我想我的问题是,将数据作为 JavaScript 对象而不是 JSON 发送对我来说完全没问题吗?做一个比另一个有好处吗?
例子:
这可行:(将数据作为 JS 对象发送):
$("#xform").submit(function (event) {
event.preventDefault();
var obj = { xnumber: 1 };
$.ajax({
type: 'GET',
url: 'adddresshere',
data: obj,
dataType: 'json',
contentType: 'application/json',
}).done(function (result) {
table.clear();
table.rows.add(result).draw();
});
});
这不起作用 - (以 JSON 格式发送数据)
$("#xform").submit(function (event) {
event.preventDefault();
var obj = { xnumber: 1 };
var myJSON = JSON.stringify(obj);
$.ajax({
type: 'GET',
url: 'adddresshere',
data: myJSON,
dataType: 'json',
contentType: 'application/json',
}).done(function (result) {
table.clear();
table.rows.add(result).draw();
});
});
那么,从现在开始,只要 JS 对象有效(就像现在对我一样),我可以坚持发送 JS 对象吗?
【问题讨论】:
-
当您将
data设置为对象并且contentType是application/json时,jQuery 会为您执行JSON.stringify。请参阅contentTypesetting documentation on jquery.com。如果使用该值,您可能还想进一步了解它如何始终发送预检请求... -
@Heretic Monkey 非常感谢!所以就像你说的,它看起来像 jQuery 自动完成的。这也许可以解释为什么我通过尝试 JSON.stringify 一个已经字符串化的 JSON 来得到 CORS 错误,这会导致语法错误,从而导致响应与 code:200 不同,后者没有“Access-control-allow-origin”标头(仅代码:200)有它 - 或类似的东西。无论如何,再次感谢。
标签: javascript jquery json ajax rest