【问题标题】:JQuery Post changes json data to query stringJQuery Post 将 json 数据更改为查询字符串
【发布时间】:2019-10-04 07:46:58
【问题描述】:

我正在通过 $.post() 执行 JSON POST,但它似乎正在将我的 POST 内容从 JSON 更改为 查询字符串参数.

我将以下内容发布到终点:

$.post('/proxy/endpoint.json', { "query": {"test": true, "msg": "test" } });

处理请求的服务器显示以下日志:

ERROR - Bad POST params: query%5Btest%5D=true&query%5Dmsg%5Btest

请求流程:

JavaScript -> IIS 重写代理 -> Nginx -> Java 服务器端点,e.g. localhost:4000/endpoint.json

注意:我已经通过 Postman 直接向 IIS 服务器 测试了相同的 POST 请求,效果很好。所以只能是我的 Jquery 导致了这个问题。

关于如何改进这一点的任何提示?

【问题讨论】:

  • 当我尝试时,您的代码 POST 对我来说很好。你能分享你剩下的 JavaScript 吗?

标签: jquery http-post


【解决方案1】:

返回 jQuery.post ,并传递正确的 params 对象

例如,将代码更改为

$.post('/proxy/endpoint', {"test": true, "msg": "test" });

【讨论】:

  • 不幸的是,我无法更改正在传递的 JSON 对象,因为服务器期望它采用该格式。
  • 不要直接传递给 jQuery.Post ,尝试将其用作“SERVERJSON.query”。仅使用传递过来的 JSON 对象中查询的值
  • 我从您的回复中得到了提示,因此您的意思是使用 JSON 对象的字符串表示。
  • 是的,我的意思是使用 json 对象的字符串并传递键“查询”的值(例如:obj.query)
【解决方案2】:

在这种情况下,答案是使用 JSON 对象的字符串表示

$.post('/proxy/endpoint.json', JSON.stringify({ "query": {"test": true, "msg": "test" } }));

事实证明这行得通。

感谢 Ahmed El-sayed 引导我朝着正确的方向前进。

【讨论】:

  • 我请求您将有用的建议标记为答案。这将帮助面临同样问题的其他人。
猜你喜欢
  • 2021-04-22
  • 2023-03-10
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多