English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
AjaxでXMLデータを送信:データをXML形式で包装することで送信が可能になり、フロントエンドのjsはresponseXMLでXMLパラメータを受け取り、バックエンドはストリームとDOMを使用して読み取ります4jで解析
フロントエンドページ
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Ajax XMLデータ処理デモ</title> <script type="text/javascript"> //get方式ajax function send1){ alert("ok"); var name = document.getElementsByName("name")[0].value; var age = document.getElementsByName("age")[0].value; var xhr = null; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject("Microsoft.XMLHttp"); } var url = "<c:url value='/XmlServlet?name='/">"+name+"&age="+age; //3アクセス方法を設定 xhr.open("GET", url, true); //4アクセス成功後の操作を設定 xhr.onreadystatechange = function() { if(xhr.readyState==4{//返信 if(xhr.status==200) {//応答コードが正常 var txt = xhr.responseText; alert(txt); } } }; xhr.send(null); } </script> <!-- 前台以xml的格式向服务器发送数据 --> <script type="text/javascript"> //post方式ajax function send2){ alert("222"); //1Ajaxオブジェクトの作成 var xhr = null; if(window.XMLHttpRequest) {//高バージョン xhr = new XMLHttpRequest(); }else{//低バージョン xhr = new ActiveXObject("Microsoft.XMLHttp"); } //2リクエストアドレス var url = "<c:url value='/XmlServlet'/>"; //3アクセス方法を設定 xhr.open("POST", url, true); //4アクセス成功後の操作を設定 xhr.onreadystatechange = function() { if(xhr.readyState==4{//返信 if(xhr.status==200) {//応答コードが正常 var xmlObj = xhr.responseXML; var users = xmlObj.getElementsByTagName("user"); for(var i = 0; i < users.length; i++{ var id = users[i].getAttribute("id"); var name = users[i].childNodes[0].firstChild.data;//xml中的dom模型中的操作方法,和html中有点小差别 var age = users[i].childNodes[1].firstChild.data;//不能用childNodes["age"] alert(id+","+name+","+age); } } } }; var name = document.getElementsByName("name")[0].value; var age = document.getElementsByName("age")[0].value; var xml="<user><name>"+name+"</name><age>"+age+"</age></user>"; xhr.send(xml); } </script> </head> <body> Name: <input type="text" name="name"> <br /> Age: <input type="text" name="age"> <br /> <input type="button" value="Get送信" onclick="send1();" /> <br /> <input type="button" value="Post送信" onclick="send2()" /> <br /> </body> </html>
バックエンドページ
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Ajax XMLデータ処理デモ</title> <script type="text/javascript"> //get方式ajax function send1){ alert("ok"); var name = document.getElementsByName("name")[0].value; var age = document.getElementsByName("age")[0].value; var xhr = null; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject("Microsoft.XMLHttp"); } var url = "<c:url value='/XmlServlet?name='/">"+name+"&age="+age; //3アクセス方法を設定 xhr.open("GET", url, true); //4アクセス成功後の操作を設定 xhr.onreadystatechange = function() { if(xhr.readyState==4{//返信 if(xhr.status==200) {//応答コードが正常 var txt = xhr.responseText; alert(txt); } } }; xhr.send(null); } </script> <!-- 前台以xml的格式向服务器发送数据 --> <script type="text/javascript"> //post方式ajax function send2){ alert("222"); //1Ajaxオブジェクトの作成 var xhr = null; if(window.XMLHttpRequest) {//高バージョン xhr = new XMLHttpRequest(); }else{//低バージョン xhr = new ActiveXObject("Microsoft.XMLHttp"); } //2リクエストアドレス var url = "<c:url value='/XmlServlet'/>"; //3アクセス方法を設定 xhr.open("POST", url, true); //4アクセス成功後の操作を設定 xhr.onreadystatechange = function() { if(xhr.readyState==4{//返信 if(xhr.status==200) {//応答コードが正常 var xmlObj = xhr.responseXML; var users = xmlObj.getElementsByTagName("user"); for(var i = 0; i < users.length; i++{ var id = users[i].getAttribute("id"); var name = users[i].childNodes[0].firstChild.data;//xml中的dom模型中的操作方法,和html中有点小差别 var age = users[i].childNodes[1].firstChild.data;//不能用childNodes["age"] alert(id+","+name+","+age); } } } }; var name = document.getElementsByName("name")[0].value; var age = document.getElementsByName("age")[0].value; var xml="<user><name>"+name+"</name><age>"+age+"</age></user>"; xhr.send(xml); } </script> </head> <body> Name: <input type="text" name="name"> <br /> Age: <input type="text" name="age"> <br /> <input type="button" value="Get送信" onclick="send1();" /> <br /> <input type="button" value="Post送信" onclick="send2()" /> <br /> </body> </html>
--------------------------------------------------------------------------------
AjaxでJsonデータを転送のポイントはApacheや阿里巴巴のJSONArrayクラスを使用してデータを転送すること
フロントエンドコード
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Ajax Jsonデータ処理デモ</title> <script type="text/javascript"> function ask1() { //1Ajaxオブジェクトの作成 var xhr = null; if (window.XMLHttpRequest) {//高バージョン xhr = new XMLHttpRequest(); } else {//低バージョン xhr = new ActiveXObject("Microsoft.XMLHttp"); } //2リクエストアドレス var url = "<c:url value='/JsonServlet1'/>"; //3アクセス方法を設定 xhr.open("POST", url, true); //4アクセス成功後の操作を設定 xhr.onreadystatechange = function() { if (xhr.readyState == 4) {//返信 if (xhr.status == 200) {}}//応答コードが正常 //※※※※※バックエンドから返されるjson文字列を解析します //jsのeval()メソッドの機能:はパラメータテキストを検証し、jsのどのデータ型に一致するかを確認し、それに対応するオブジェクトに変換します var txt = xhr.responseText; var users = eval("(" + txt + ")"); //json形式のテキストをjsonオブジェクトに変換します for ( var i = 0; i < users.length; i++) { alert(users[i].id + "," + users[i].name + "," + users[i].age); } } } }; //5 送信 xhr.send(null); } function ask2() { //1Ajaxオブジェクトの作成 var xhr = null; if (window.XMLHttpRequest) {//高バージョン xhr = new XMLHttpRequest(); } else {//低バージョン xhr = new ActiveXObject("Microsoft.XMLHttp"); } //2リクエストアドレス var url = "<c:url value='/JsonServlet2'/>"; //3アクセス方法を設定 xhr.open("POST", url, true); //4アクセス成功後の操作を設定 xhr.onreadystatechange = function() { if (xhr.readyState == 4) {//返信 if (xhr.status == 200) {}}//応答コードが正常 //※※※※※バックエンドから返されるjson文字列を解析します //jsのeval()メソッドの機能:はパラメータテキストを検証し、jsのどのデータ型に一致するかを確認し、それに対応するオブジェクトに変換します var txt = xhr.responseText; //alert(txt); //json形式のテキストをjsonオブジェクトに変換します var users = eval("(" + txt + ")"); for ( var key in users)//マップの巡回方法 alert("属性:" + key + ",値:" + users[key]); } //for ( var i = 0; i < users.length; i++) {//リストの巡回方法 //alert(users[i].id +","+users[i].name+","+users[i].age); //} }; }; //5 送信 xhr.send(null); } function ask3() { //1Ajaxオブジェクトの作成 var xhr = null; if (window.XMLHttpRequest) {//高バージョン xhr = new XMLHttpRequest(); } else {//低バージョン xhr = new ActiveXObject("Microsoft.XMLHttp"); } //2リクエストアドレス var url = "<c:url value='/JsonServlet2'/>"; //3アクセス方法を設定 xhr.open("POST", url, true); //4アクセス成功後の操作を設定 xhr.onreadystatechange = function() { if (xhr.readyState == 4) {//返信 if (xhr.status == 200) {}}//応答コードが正常 //※※※※※バックエンドから返されるjson文字列を解析します //jsのeval()メソッドの機能:はパラメータテキストを検証し、jsのどのデータ型に一致するかを確認し、それに対応するオブジェクトに変換します var txt = xhr.responseText; //alert(txt); //json形式のテキストをjsonオブジェクトに変換します var users = eval("(" + txt + ")"); for ( var key in users)//マップの巡回方法 alert("属性:" + key + ",値:" + users[key]); } //for ( var i = 0; i < users.length; i++) {//リストの巡回方法 //alert(users[i].id +","+users[i].name+","+users[i].age); //} }; }; //5 送信 xhr.send(null); } </script> </head> <body> <input type="button" onclick="ask1();" value="ajax请求后台データ(手動でjson形式を包装)" /> <br /> <input type="button" onclick="ask2();" value="ajax请求后台データ(用apacheツールでjson形式を包装)" /> <input type="button" onclick="ask3()" value="ajax请求后台数据(用fastjson工具封装json方式)" /> </body> </html>
JsonServlet1.java
package cn.hncu.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.hncu.domain.User; public class JsonServlet1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //调用后台service.dao.query(),到数据库当中把信息读取出来 //为简化知识点的理解,此处后台部分的功能直接模拟 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); List<User> users = new ArrayList<User>(); users.add(new User("A001","Jack",20)); users.add(new User("A002","Rose",22)); users.add(new User("B001","张三",20)); users.add(new User("B002","李四",30)); String json=""; //用java封装出json格式的字符串:[{name:"Jack",age:25}, {...}, {...} ] for(User u:users){ if(json.equals("")){ json="{name:\""+u.getName()+"\",id:\""+u.getId()+"\",age:"+u.getAge()+"}"; }else{ json = json +",{ name:\""+u.getName()+"\",id:\""+u.getId()+"\",age:"+u.getAge()+"}" ; } } json="["+json+"]"; out.print(json); } }
JsonServlet2.java
package cn.hncu.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.hncu.domain.User; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JsonServlet2 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); List<User> users = new ArrayList<User>(); users.add(new User("A001","Jack",20)); users.add(new User("A002","Rose",22)); users.add(new User("B001","张三",20)); users.add(new User("B002","李四",30)); String strJson=com.alibaba.fastjson.JSONArray.toJSONString(users); System.out.println(strJson); //fastjsonツールを使用してリストをJSON文字列に変換します(jarパッケージが1つだけです) Map<String, Object> map = new HashMap<String, Object>(); map.put("addr", "湖南"); map.put("height", "170"); map.put("marry", "no"); map.put("user", new User("A003","小李",25)); String strMap=com.alibaba.fastjson.JSONArray.toJSONString(map); out.print(strMap.toString()); } }
JsonServlet3.java
package cn.hncu.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import cn.hncu.domain.User; public class JsonServlet3 extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); List<User> users = new ArrayList<User>(); users.add(new User("A001","Jack",20)); users.add(new User("A002","Rose",22)); users.add(new User("B001","张三",20)); users.add(new User("B002","李四",30)); //fastjsonツールを使用してリストをJSON文字列に変換します(jarパッケージが1つだけです) JSONArray json=JSONArray.fromObject(users); String strJson=json.toString(); System.out.println(strJson); Map<String, Object> map = new HashMap<String, Object>(); map.put("addr", "湖南"); map.put("height", "170"); map.put("marry", "no"); map.put("user", new User("A003","小李",25)); JSONObject obj = JSONObject.fromObject(map); System.out.println(obj.toString()); out.print(obj.toString()); } }
これで本文のすべての内容が終わりです。皆様の学習に役立つことを願っています。また、呐喊教程を多くの皆様にサポートしていただけると嬉しいです。
声明:本文の内容はインターネットから取得しており、著作権者は所有者であり、インターネットユーザーが自発的に貢献し、自己でアップロードしたものであり、本サイトは所有権を有しておらず、人工的な編集は行われていません。著作権に関する問題がある場合は、メールを送信してください:notice#oldtoolbag.com(メールを送信する際には、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとれましたら、本サイトは即座に侵害を疑われるコンテンツを削除します。)