Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我丢失了参数?_Javascript_Json_Servlets_Query String - Fatal编程技术网

Javascript 为什么我丢失了参数?

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

我有一个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,%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你在开玩笑吧?