我有一个JSP页面,我在其中向一个将数据作为JSON数组的servlet发送一个AJAX请求。但我在servlet中获得null值。 Request.getParameter()返回null,但是当我尝试使用简单的json对象时,例如数据:{jsonData:'test'}它对我有用。
Ajax Snippet
function updateStatus() {
var Url = {
"Urls" : [
{
"Env" : "DEV : CC",
"Url" : "https://localhost:8081/cc",
"Status" : "Up",
"Revision" : ""
}, {
"Env" : "MO : CM",
"Url" : "https://localhost:8082/ab",
"Status" : "Up",
"Revision" : "" } ] }
$.ajax({
url:'Environment',
data:{jsonData : Url},
type:'post',
cache:false,
success:function(data){
alert('Hi');
},
error:function(){
alert('error');
}
});
}
Servlet功能
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try
{
String jsonString = request.getParameter("jsonData");
JSONArray array = new JSONArray(jsonString);
for (int i = 0; i < array.length(); i++) {
String path = array.getString(i);
System.out.println(path);
}
}
catch (JSONException e)
{
e.printStackTrace();
}
答案 0 :(得分:1)
当您发送数据时,如果您在浏览器开发者工具&#34;网络&#34;上检查资源Form Data
的{{1}}。选项卡(在Chrome中),您会注意到您的数据正在按如下方式发送到服务器:
Environment
因此,在这种情况下,您可以分别访问它们中的每一个:
jsonData[Urls][0][Env]:DEV : CC
jsonData[Urls][0][Url]:https://localhost:8081/cc
jsonData[Urls][0][Status]:Up
jsonData[Urls][0][Revision]:
jsonData[Urls][1][Env]:MO : CM
jsonData[Urls][1][Url]:https://localhost:8082/ab
jsonData[Urls][1][Status]:Up
jsonData[Urls][1][Revision]:
但您可以使用request.getParameter("jsonData[Urls][0][Url]");
request.getParameter("jsonData[Urls][1][Env]");
并通过data:{jsonData : JSON.stringify(Url)}
获取它以将有效的Json字符串发送到服务器端并使用任何Json解析器库解析它。
注意:您的json数据被编码为内容类型的键值对:&#34; application / x-www-form-urlencoded &#34;而不是&#34; application / json&#34;。因此,您可以request.getParameter("jsonData");
访问它。