上一篇【http://www.jb51.cc/article/p-olpzclwq-bpe.html】
提到请求格式为$.get(url,queryString,function(data){}
所解决的两种思路;
以及请求格式为$.get(url,{mydata:queryString},function(data){}
的两种思路。
本篇讲一下下面格式的后台接收第三种思路:
- queryString = $('#editform').serializeArray();
- queryString = JSON.stringify(queryString);//string
- //querystring为json 字符串数组
- $.get(url,function(data){}
思路 :使用request.getParameter("key")
;
- package com.atgui.ajax.app.servlet;
-
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.net.URLDecoder;
- import java.util.HashMap;
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import org.codehaus.jackson.map.ObjectMapper;
-
- public class GetServlet3 extends HttpServlet {
-
- /** * queryString = $('#editform').serializeArray(); queryString = JSON.stringify(queryString);//string $.get(url,function(data){}); */
- public void destroy() {
- super.destroy(); // Just puts "destroy" string in log
- // Put your code here
- }
-
- public void doGet(HttpServletRequest request,HttpServletResponse response)
- throws ServletException,IOException {
-
- doPost(request,response);
- }
-
- public void doPost(HttpServletRequest request,IOException {
-
- response.setContentType("text/html");
- PrintWriter out = response.getWriter();
-
-
- String jsonString =request.getParameter("mydata") ;
- System.out.println(jsonString);
-
-
- ObjectMapper objectMapper = new ObjectMapper();
- String resultJson = objectMapper.writeValueAsString(jsonString);
- System.out.println("resultJson ..."+resultJson);
-
- out.print(resultJson);
- out.flush();
- out.close();
- }
-
- public void init() throws ServletException {
- // Put your code here
- System.out.println("getServlet init()....");
- }
-
- }
result as follows :
- //启动servlet
- getServlet init()....
-
- //解析得到的mydata
- [{"name":"username","value":"yanshi02"},{"name":"password","value":"123456"}]
-
- //返回的json
- resultJson ..."[{\"name\":\"username\",\"value\":\"yanshi02\"},{\"name\":\"password\",\"value\":\"123456\"}]"
如果直接返回jsonString ,此时typeof data = object ; 那么不需要进行解析可以直接使用data.key获取json 属性;
- 拿到返回的data
- 进行JSON遍历!
如果返回resultJson,则需要进行解析 ,才可以遍历json属性!
解析过程参考 前面讲的post
【F12查看浏览器】
可以看到浏览器对URL里面的数组进行了编码,但是我后台并没有显示使用URL解码:
- String jsonString2 = URLDecoder.decode(jsonString.toString(),"UTF-8");
- System.out.println(jsonString2);
结果仍然正确!
关于解码编码问题,可以参考我写的系列文章HTTP请求中的编码解码
Tips:
参考post参考post传输参数数据格式为{key : value}可知:
无论 get 或者 post ,如果data为{key : value}形式。
则都可以使用request.getParameter("key")
;的形式进行获取。