標籤:ajax json json字串 json數組
最近上班太忙,晚上抽空整理一下ajax請求中,後台返回json字串和json數組的情境,以及前台的處理樣本。
直接看代碼。
json字串的後台響應
package com.ajax;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/jsonStr")public class JsonStr extends HttpServlet {/** * */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 構造json對象String resStr = "{" + "name:" + "\"zhangsan\"," + "id:" + "\"id001\"" + "}";// 輸出json對象到前台PrintWriter out = resp.getWriter();out.write(resStr);out.flush();out.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}
json數組的後台響應
package com.ajax;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/jsonArr")public class JsonArr extends HttpServlet {/** * */private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 構造json對象String resStr1 = "{" + "name:" + "\"zhangsan\"," + "id:" + "\"id001\"" + "}";String resStr2 = "{" + "name:" + "\"lisi\"," + "id:" + "\"id002\"" + "}";String resStr3 = "{" + "name:" + "\"wangwu\"," + "id:" + "\"id003\"" + "}";// 構造json數組String jsonArr = "[" + resStr1 + "," + resStr2 + "," + resStr3 + "]";// 輸出json數組到前台PrintWriter out = resp.getWriter();out.write(jsonArr);out.flush();out.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}
前台頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Json</title></head><body><br><br><input type="button" value="JsonStr" onclick="jsonStr()" /><br><br><table><tr><td>username</td><td><input id="username"></td></tr><tr><td>id</td><td><input id="id"></td></tr></table><br><br><br><input type="button" value="JsonArr" onclick="jsonArr()" /><br><br><table border="1" bordercolor="red"><caption>Json Array</caption><thead><tr><th>Username</th><th>Id</th></tr></thead><tbody id="tb"></tbody></table></body><script type="text/javascript">// json字串處理方法function jsonStr() {var xhr = new XMLHttpRequest();xhr.open("get", "jsonStr");xhr.onreadystatechange = function(data) {if (xhr.readyState == 4 && xhr.status == 200) {// 將json字串轉換為json對象var obj = eval("(" + data.target.responseText + ")");document.getElementById("username").value = obj.name;document.getElementById("id").value = obj.id;}};xhr.send(null);}// json數組處理方法function jsonArr() {var xhr = new XMLHttpRequest();xhr.open("get", "jsonArr");xhr.onreadystatechange = function(data) {if (xhr.readyState == 4 && xhr.status == 200) {// 將json字串轉換為json數組var obj = eval("(" + data.target.responseText + ")");// 建立程式碼片段,用於存放表格行var oFragment = document.createDocumentFragment();// 根據json數組長度,產生行資料for (var i=0; i<obj.length; i++) {var trObj = document.createElement("tr");trObj.innerHTML = "<td>" + obj[i].name + "</td><td>" + obj[i].id + "</td>";oFragment.appendChild(trObj);}// 將行資料添加在表格的tBody部分document.getElementById("tb").appendChild(oFragment);}};xhr.send(null);}</script></html>
頁面
點擊 JsonStr 和 JsonArr 按鈕後的效果
好了,整理完畢,樣本僅供學習。
對了,有一點疑惑,之前回呼函數中,擷取響應資料的時候,都是直接通過data.responseText 來擷取的,今天的代碼中必須使用data.target.responseText,不知道為什嗎?有知道的朋友煩請告知一聲,非常感謝。
ajax響應json字串和json數組