我需要一些绝望的帮助。我已经在这里待了4个小时,而且我已经筋疲力尽了。 :/这是我的情况:
我有一个Javascript应用程序正在向外部站点发出POST请求(使用jQuery $ .post)。在外部站点上,我使用Jet Camel运行Jetty以将其暴露给Web。我在Camel中编写的Web服务期望所有请求都有JSON数据。例如,一个请求需要一个id,所以我发送它{"id": 10}
。
这是我的问题:它不适用于Javascript。我有一些不同的工具可以为我发送帖子请求(比如浏览器的Poster扩展名)。如果我使用Poster并将正文设置为{"id": 10}
,它就可以正常工作。我在服务中得到了那个确切的字符串。
但是,如果我从Javascript发帖,我会得到不同的东西。发布JSON对象将在我的服务端给我字符串“id = 10”。 (这种情况可以,但最终我需要实际的JSON对象。)如果我对JSON对象进行字符串化,我会得到JSON字符串,只有所有字符都被转义。 (例如“%7Bid%33 ......”)。
我发誓我已尝试过每种可能发布数据的方法,但我要么得到奇怪的已经解析的JSON,要么是转义字符串(或根本没有)。有没有办法我可以让Javascript不解析JSON对象并发送它(就像我的发布工具一样)?如果没有,是否有一种安全,有效的方法可以解除我获得的JSON字符串?
我真的很感激任何帮助。
答案 0 :(得分:1)
我觉得我们需要更多信息,但请看一下这个javascript插件。这可能是您的解决方案:https://github.com/flowersinthesand/jquery-stringifyJSON
答案 1 :(得分:0)
尝试使用jQuery.ajax并将processData
设置为false
(默认为true
):
$.ajax({
url: '/where/to/post',
type: 'POST',
data: {"id": 10},
processData: false
});
通常,jQuery会将data
中的任何内容转换为查询字符串格式,如id=10
。 processData
标志告诉jQuery将其解释为json hashmap。
答案 2 :(得分:0)
发布JSON对象将在我的服务端给我字符串“id = 10”。
Javascript不会执行此转换,因此您的服务器会执行此操作。
您的服务器可能会根据您的POST的content-type
做出不同的反应,例如application/json
vs text/plain
或text/html
,这是基于REST服务的常见功能。
答案 3 :(得分:0)
这里的答案给了我一些提示,但最终,在它正常工作之前进行了大量的调整。我不得不做三件事:
processData: false
。contentType
更改为application/json
)。contentType to
text/plain
。这将它作为原始字符串发送。这就是诀窍。我现在在服务器端获取我想要的JSON字符串。