【问题标题】:Sending JavaScript Object through AJAX works, JSON doesn't?通过 AJAX 发送 JavaScript 对象有效,JSON 无效?
【发布时间】: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 设置为对象并且contentTypeapplication/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


【解决方案1】:

简短的回答是肯定的。

说明: 当在线博客说您需要传递 JSON 对象时 - 它们意味着您需要发送 Java Script Object Notation 对象。当你这样写时:

var obj = { xnumber: 1 }

您已经在创建一个 JSON 对象。这很好通过 ajax 调用发送。当您进行 JSON 字符串化操作时,它基本上将上述 JSON 转换为字符串。因此,服务器无法将其视为 JSON 对象,它将失败。

【讨论】:

【解决方案2】:

您的 JavaScript 对象是反序列化的 JSON。正如Heretic Monkey 指出的那样,JSON.stringify 序列化您的 JavaScript 对象以通过网络发送。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-12-19
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多