现在的位置: 首页 > 综合 > 正文

关于Ajax中处理回传参数的几种实现

2013年10月25日 ⁄ 综合 ⁄ 共 8842字 ⁄ 字号 评论关闭

 from:http://wangyingjie2008.blog.163.com/blog/static/1223393420112302225681/

我的试验主要包括4种:

1.回传一个普通的String字符串.

2.回传一个组织好的Javascript字符串.

3.回传一个Json对象.(需要引入json.jar)

4.回传一个XML对象.

基本实现如下:

其中测试页面为:

<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%request.setCharacterEncoding("UTF-8");%>

<html>

<head>

<title>测试Ajax页面</title>

</head>

<body>

<table width="100%" height="100%" >

    <td align="center" valign="center" >

        <form action="" method="post" onsubmit="">

            <table border="3" >

                <tr>

                    <td>

                        <input name="试验返回String" type="button" value="试验返回String" onclick="testAjaxForString();" style="width:140px;">

                    </td>

                </tr>

                <tr>

                    <td>

                        <input name="试验返回javascriptString" type="button" value="试验返回javascriptString" onclick="testAjaxForObject();" style="width:140px;">

                    </td>

                </tr>

                <tr>

                    <td>

                        <input name="试验返回json" type="button" value="试验返回json" onclick="testAjaxForJson();" style="width:140px;">

                    </td>

                </tr>

                <tr>

                    <td>

                        <input name="试验返回xml" type="button" value="试验返回xml" onclick="testAjaxForXml();" style="width:140px;">

                    </td>

                </tr>

            </table>

        </form>

    </td>

</table>

</body>

</html>

<script type="text/javascript">

var xmlHttp ;

function createXmlHttpRequest(){

    if(window.ActiveXObject){

        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") ;

    }else if(window.XMLHttpRequest){

        xmlHttp = new XMLHttpRequest();

    }

}

/**//*返回String*/

function testAjaxForString(){

    createXmlHttpRequest();

    var url = "HelloWorld?";

    var queryString = "name=songwei";

    url += queryString ;

//    xmlHttp.onreadystatechange = parseHello ;//如果是异步,既open中最后一个参数为true.则打开该选项.

    xmlHttp.open("post",url,false);

    xmlHttp.send(null);

    alert(xmlHttp.responseText); //如果是字符串或者xml.

}

/**//*返回JsObject*/

function testAjaxForObject(){

    createXmlHttpRequest();

    var url = "HelloWorldForObject?";

    var queryString = "name=songwei";

    url += queryString ;

//    xmlHttp.onreadystatechange = parseHello ;

    xmlHttp.open("post",url,false);

    xmlHttp.send(null);

    alert(xmlHttp.responseText);

    var o = eval(xmlHttp.responseText);

    alert("username="+o.username);

    alert("password="+o.password);

    var farray = o.friend ;

    var fname ="";

    for(var i=0;i<farray.length;i++){

        fname += farray[i]+"    ";

    }

    alert("friend list ="+fname);    

}

//返回Json

function testAjaxForJson(){

    createXmlHttpRequest();

    var url = "HelloWorldForJson?";

    var queryString = "name=songwei";

    url += queryString ;

    xmlHttp.open("post",url,false);

    xmlHttp.send(null);

    alert(xmlHttp.responseText);

    var o = eval("(" + xmlHttp.responseText + ")");

    alert(o.userInfo.username);

    alert(o.userInfo.password);

    alert(o.userInfo.friends[0]);

    alert(o.userInfo.friends[1]);

}

//返回XML

function testAjaxForXml(){

    createXmlHttpRequest();

    var url = "HelloWorldForXML?";

    var queryString = "name=songwei";

    url += queryString ;

    xmlHttp.open("post",url,false);

    xmlHttp.send(null);

    alert(xmlHttp.responseXML);

    alert ("tagName: " + xmlHttp.responseXML.documentElement.tagName);

    var xmlDoc = xmlHttp.responseXML ;

    var xmlRoot=xmlDoc.documentElement;

    

    var friendsItem=xmlRoot.getElementsByTagName("friends");

    alert(friendsItem[0].firstChild.firstChild.data);

    alert(friendsItem[0].firstChild.nextSibling.firstChild.data);

    var usernameItem = xmlRoot.getElementsByTagName("username");

    alert(usernameItem[0].firstChild.data);

    

}

</script>对于各种回传方式的不同servlet实现:

1.普通字符串 ,HelloWorld.java(Servlet)

public class HelloWorld extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

    public HelloWorld() {

        super();

    }       

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request,response);

    }      

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // TODO Auto-generated method stub

        String name = request.getParameter("name");

        String str = "Hello "+name ;

        PrintWriter pw = response.getWriter();

        pw.print(str);

        pw.close();

    }                 

}

2.Javascript字符串Servlet实现

HelloWorldForObject.java

 public class HelloWorldForObject extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

    public HelloWorldForObject() {

        super();

    }       

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request,response);

    }      

    

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String name = request.getParameter("name");

        User user = new User();

        user.setUsername(name);

        user.setPassword("abc");

        List<String> friend = new ArrayList<String>();

        friend.add("wangdong");

        friend.add("zhaoyong");

        user.setFriend(friend);

        StringBuffer sb = new StringBuffer();

        sb.append("var o = new Object();");

        sb.append("o.username ='"+user.getUsername()+"' ;");

        sb.append("o.password ='"+user.getPassword()+"' ;");

        sb.append("o.friend = new Array(");

        String tmp = "" ;

        for(String s : user.getFriend()){

            if(tmp.trim().length()<1){

                tmp += "'"+s+"'" ;

            }else{

                tmp +="," ;

                tmp += "'"+s+"'" ;

            }

        }

        sb.append(tmp+") ;");

        sb.append("o;");

        PrintWriter pw = response.getWriter();

        pw.print(sb.toString());

        pw.close();

    }                 

}

3.JSon对象实现

HelloWorldForJson.java

 public class HelloWorldForJson extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

    public HelloWorldForJson() {

        super();

    }       

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request,response);

    }      

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

         response.setCharacterEncoding("UTF-8");  

         response.setHeader("Cache-Control","no-cache");  

         request.setCharacterEncoding("UTF-8");          

        String result = new String();

        String name = request.getParameter("name");

        try{

            JSONObject jsonResult = new JSONObject();

            jsonResult.put("username",name);

            jsonResult.put("password","password");

            JSONArray jsonFriends = new JSONArray();

            jsonFriends.put("张三");

            jsonFriends.put("李四");

            jsonResult.put("friends",jsonFriends);

            result = new JSONObject().put("userInfo", jsonResult).toString();

        }catch(JSONException jex){

            jex.printStackTrace();

        }

        response.getWriter().print(result);

        response.getWriter().close();

    }                 

}

4.XML对象实现

HelloWorldForXML.java  

public class HelloWorldForXML extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {

    public HelloWorldForXML() {

        super();

    }       

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request,response);

    }      

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String name = request.getParameter("name");

        Document doc = null ;

        String docStr ="" ;

        try{

            DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

            DocumentBuilder db = dbf.newDocumentBuilder();

            doc = db.newDocument();

            Element root = doc.createElement("userInfo");

            doc.appendChild(root);

            Element nameE = doc.createElement("username");

            Text nameT = doc.createTextNode(name);

            nameE.appendChild(nameT);

            root.appendChild(nameE);    

    

            Element passE = doc.createElement("password");

            Text passT = doc.createTextNode("password");

            passE.appendChild(passT);

            root.appendChild(passE);    

            

            Element friends = doc.createElement("friends");

            

            Element friend1 = doc.createElement("friend");

            Text f1T = doc.createTextNode("张三");

            friend1.appendChild(f1T);

            Element friend2 = doc.createElement("friend");

            Text f2T = doc.createTextNode("李四");

            friend2.appendChild(f2T);

            

            friends.appendChild(friend1);

            friends.appendChild(friend2);

            root.appendChild(friends);

            

            ByteArrayOutputStream bstream = null;

            try {

                bstream = new ByteArrayOutputStream();

                Transformer xformer = TransformerFactory.newInstance()

                        .newTransformer();

                Source source = new DOMSource(doc);

                Result result = new StreamResult(bstream);

                xformer.transform(source, result);

            } catch (Exception e) {

                e.printStackTrace();

            }        

            try {

                docStr =  new String(bstream.toByteArray(), "UTF-8");

            } catch (UnsupportedEncodingException e) {

                e.printStackTrace();

                docStr = new String(bstream.toByteArray());

            }

            System.out.println(docStr);

        

        }catch(ParserConfigurationException ex){

            ex.printStackTrace();

        }

        response.setContentType("text/xml;charset=UTF-8"); 

        PrintWriter writer = response.getWriter();

        writer.print(docStr); 

        writer.flush(); 

        writer.close();        

    } 

抱歉!评论已关闭.