Ajax解析返回的Json数据
1.前台页面传数据,前台直接解析返回的json数据
对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受, 那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次。
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。
举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
所以下面两个执行结果是不同的: alert(eval("{}"); // return undefined
$.ajax({ type:"POST",asycn:false,url:"FindCampusInfoServlet",data:{"schoolId":$("#school").val()},success : function(data) { if(data!="empty") { var objs=eval("("+data+")"); $("#campus").empty(); $("#campus").append("<option value="">请选择</option>"); for(var i=0;i<objs.length;i++) { $("#campus").append("<option value=""+objs[i].campusid+";"+objs[i].accessurl+"">"+objs[i].campusname+"</option>"); } $("#campus").selectmenu('refresh',true); } else { $("#campus").empty(); $("#campus").append("<option value="">请选择</option>"); $("#campus").selectmenu('refresh',true); } } }); 2.后台Servlet处理数据,以json数据形式返回 public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); String sSchoolId = request.getParameter("schoolId"); CommUseImp comm = new CommUseImp(); PrintWriter out = response.getWriter(); try { String sJson = comm.findCampus(sSchoolId); //String sRoomInfo = comm.findRoomInfo(0); if (StringUtils.isEmpty(sJson)) { out.write("empty"); out.close(); } else { JSONObject json = new JSONObject(sJson); //JSONObject json2 = new JSONObject(sRoomInfo); org.json.JSONArray jsonArray = json.getJSONArray("data"); out.write(jsonArray.toString()); out.close(); } } catch (JSONException e) { e.printStackTrace(); } } public String findCampus(String sSchoolId) { if (StringUtils.isEmpty(sSchoolId)) { return null; } String sSql = "SELECT CAMPUSID,CAMPUSNAME,ACCESSURL FROM CAMPUS WHERE SCHOOLID='" + sSchoolId + "'"; try { StringBuilder sb = new StringBuilder(); List<Map<String,Object>> list = m_runner.query(sSql,new MapListHandler()); if (list != null && list.size() > 0) { sb.append("{'data':["); int iCount = list.size(); for (int i = 0; i < iCount; i++) { sb.append("{'campusid':'" + list.get(i).get("CAMPUSID") + "',"); sb.append("'campusname':'" + list.get(i).get("CAMPUSNAME") + "',"); sb.append("'accessurl':'" + list.get(i).get("ACCESSURL") + "'},"); } String sResult = sb.substring(0,sb.length() - 1) + "]}"; return sResult; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |