0

我需要一些绝望的帮助。我已经在这里待了4个小时,而且我已经筋疲力尽了。:/这是我的情况:

我有一个 Javascript 应用程序正在向外部站点发出 POST 请求(使用 jQuery $.post)。在外部站点上,我让 Apache Camel 与 Jetty 一起运行以将其公开给网络。我用 Camel 编写的 Web 服务需要所有请求的 JSON 数据。例如,一个请求需要一个 id,所以我发送它{"id": 10}

这是我的问题:它不适用于 Javascript。我有一些不同的工具可以为我发送帖子请求(比如浏览器的海报扩展)。如果我使用 Poster 并将 body 设置为{"id": 10},它工作得很好。我在服务中得到了那个确切的字符串。

但是,如果我从 Javascript 发布,我会得到不同的东西。发布 JSON 对象会给我的服务端字符串“id=10”。(这种情况没问题,但我最终需要实际的 JSON 对象。)如果我对 JSON 对象进行字符串化,我得到 JSON 字符串,只有所有字符都被转义。(例如“%7Bid%33...”)。

我发誓我已经尝试了所有可能的方法来发布数据,但我要么得到奇怪的已经解析的 JSON,要么得到转义的字符串(或者什么都没有)。有什么方法可以让 Javascript 不解析 JSON 对象并发送它(就像我的发布工具一样)?如果没有,是否有一种安全、有效的方法来取消转义我得到的 JSON 字符串?

我真的很感激任何帮助。

4

4 回答 4

1

我觉得我们需要更多信息,但是看看这个 javascript 插件。这可能是您的解决方案:https ://github.com/flowersinthesand/jquery-stringifyJSON

于 2012-07-19T04:09:18.970 回答
0

尝试使用 jQuery.ajax 并设置processDatafalse(默认为true):

$.ajax({
  url: '/where/to/post',
  type: 'POST',
  data: {"id": 10},
  processData: false
});

通常,jQuery 将任何内容转换data为查询字符串格式,例如id=10. 该processData标志告诉 jQuery 将其逐字解释为 json hashmap。

于 2012-07-19T04:07:41.740 回答
0

发布 JSON 对象会给我的服务端字符串“id=10”。

Javascript 不会做你的这种转换,所以你的服务器会做。

您的服务器可能会根据content-type您的 POST 做出不同的反应,例如application/jsonvs text/plainor text/html,这是基于 REST 的服务的一个共同特征。

于 2012-07-19T08:04:59.027 回答
0

这里的答案给了我一些提示,但最终,它需要进行大量调整才能正常工作。我必须做 3 件事:

  1. 添加processData: false.
  2. 将 JSON 对象转换为 JSON 字符串。如果我将其作为对象保留(即使我更改contentTypeapplication/json),该请求也不会触发。
  3. 更改contentType to text/plain. 这将其作为原始字符串发送。

这就是诀窍。我现在在服务器端得到了我想要的 JSON 字符串。

于 2012-07-19T13:11:32.473 回答