2011-12-26 37 views
1

This question似乎有我正在尝试做的答案,但它似乎不适用于我。 servlet帖子很好,并且在监视窗口中,我可以看到我的json对象,其中的_parameters成员变量为servlet HttpRequest,但我似乎无法获取参数。如何阅读servlet中的JSON字符串

这是我的代码。

的Javascript

// build data from input fields 
var jsondata = '{"author":"TEST", "title":"XYZ"}'; 

$.ajax({ 
    type : 'POST', 
    dataType : 'json', 
    data: jsondata, 
    url : '/submitquote', 
    timeout : 5000, 
    success : function(data, textStatus) { 
     // whatever 
    }, 
    error : function(xhr, textStatus, errorThrown) { 
     // whatever 
    } 
}); 

的Servlet(我也试图与 “作者” 和 “称号”,但没有回来):

// get data 
String postData = req.getParameter("jsondata"); 

这是我看到使用变量在请求对象上查看_parameters

{{"author":"TEST", "title":"XYZ"}=} 

我怎么把这些东西弄出来?

任何帮助表示赞赏!

回答

4

首先,datatype参数指定的数据类型中走出来,而不是数据中去。

其次,data说法应该给的参数的字典,在这种情况下的参数之一是已字符串化JSON对象:

var jsondata = {"author":"TEST", "title":"XYZ"}; 

$.ajax({ 
    type : 'POST', 
    dataType : 'json', 
    data: { jsondata : JSON.stringify(jsondata)}, 
    url : '/submitquote', 
    timeout : 5000, 
    success : function(data, textStatus) { 
     // whatever 
    }, 
    error : function(xhr, textStatus, errorThrown) { 
     // whatever 
    } 
}); 

现在req.getParameter("jsondata")有(仍然JSON-字符串化)的数据,你需要自己解析它。 JSON.org使你可以使用一个非常好的库。

两个进一步指出:

  1. 有两个 “jsondata” 在这里。首先是JavaScript变量,在第一行中分配并在stringify调用中使用;第二个是在data: {之后指定的并在getParameter调用中使用的Ajax参数名称。
  2. 如果你真的只是通过“作者”和“标题”,你可以忘记所有关于JSON,只需使用您的原始Javascript加req.getParameter("author")req.getParameter("title")
+0

谢谢!我现在可以像json那样获取参数。在你的笔记2)你说我可以使用我的代码和查询“作者”和“标题”,但我试过了,它似乎并没有工作,任何想法为什么从我的代码? – JohnIdol 2011-12-26 04:06:43

+0

啊,我误解了你的原始代码:对象周围有单引号(现在在我的例子中被删除) - stringify函数应该为你做什么。如果你想使用JSON(更一般但更复杂的解决方案),你应该使用stringify函数,而不是尝试生成字符串手册;如果你想使用单独的参数(更多HTTP-y解决方案),请取出引号并直接使用'getParameter()'访问参数 – Malvolio 2011-12-26 04:10:51

+0

感谢您的帮助。我认为这个问题回答了。我现在有解析json对象的问题...可能会问另一个q,并张贴下面的链接。 – JohnIdol 2011-12-26 05:02:36