Javascript 为什么我丢失了参数?
我有一个servlet进程jsoncallback请求。服务器使用Javascript 为什么我丢失了参数?,javascript,json,servlets,query-string,Javascript,Json,Servlets,Query String,我有一个servlet进程jsoncallback请求。服务器使用getQueryString得到了这个请求 "jsoncallback=jQuery16208276397785205389_1314579791091&pams={%27title%27:%27%u56DE%u590D%uFF1Afoo%27,%27tag%27:%27%27,%27content%27:%27TEST%27,%27Friedly%27:%27%27,%27IsPrivate%27:%27%27,%27C
getQueryString
得到了这个请求
"jsoncallback=jQuery16208276397785205389_1314579791091&pams={%27title%27:%27%u56DE%u590D%uFF1Afoo%27,%27tag%27:%27%27,%27content%27:%27TEST%27,%27Friedly%27:%27%27,%27IsPrivate%27:%27%27,%27Contact%27:%27%27,%27base%27:5197}&_=1314579902441"
但是当我使用
rqs = req.getParameter("pams");
调试器显示rqs为空。
但这是有效的
jsoncallback = req.getParameter("jsoncallback");
格式似乎正确。为什么pams无法获取“pams”参数
String rqs = req.getQueryString();
if (rqs != null) {
if (req.getParameterMap().containsKey("jsoncallback")) {
rqs = req.getParameter("pams");
jsoncallback = req.getParameter("jsoncallback");
}
QS = URLDecoder.decode(rqs, "UTF-8");
}
那是因为它不合适。这些大括号、冒号和逗号在URL中是非法的。我知道你的JSON字符串原来是这样的,对吗
var json={
'标题':'回复:福',
“标签”:“,
“内容”:“测试”,
“弗里德利”:“,
“IsPrivate”:“,
“联系人”:“,
'base':5197
};
(实际上是JSON,那些单引号应该是双引号)
首先需要将JSON序列化为字符串。JavaScript字符串表示形式应如下所示:
var jsonString = '{"title":"回复:foo","tag":"","content":"TEST","Friedly":"","IsPrivate":"","Contact":"","base":5197}';
(为了完整起见,我已经修复了那些无效的单引号)
如何达到这种格式留给你练习。在这一点上,该方法很有用
然后,您应该使用JavaScript函数将其URL编码为正确的HTTP请求参数值格式:
var urlEncodedJsonString = encodeURIComponent(jsonString);
这将导致此值
%7B%22title%22%3A%22%E5%9B%9E%E5%A4%8D%EF%BC%9Afoo%22%2C%22tag%22%3A%22%22%2C%22content%22%3A%22TEST%22%2C%22Friedly%22%3A%22%22%2C%22IsPrivate%22%3A%22%22%2C%22Contact%22%3A%22%22%2C%22base%22%3A5197%7D
最后,您可以将该值包含在HTTP请求的查询字符串中,并且应该能够以通常的方式使用
getParameter()
(然后将该值馈送到一些JSON解析器,如Gson,以从中获得一个完全值得使用的Java对象)。请注意,您不需要手动对其进行URL解码。当您使用getParameter()
获取单个参数而不是从getQueryString()
手动解析查询字符串时,Servlet API将为您完成此任务。调用Map#containsKey()
也完全没有必要,只需通过getParameter()
获取参数即可。如果它是null
,那么它根本就没有被发送,否则它就在那里。上次看到它时你在哪里?(对不起,忍不住。)@Tom Zych你在开玩笑吧?