Ajax中如何处理回传参数String字符串Javascript字符



Ajax中如何处理回传参数。我的试验主要包括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();
    }