ajax和servlet交互


網上有比較多的教程來將如何實現ajax與servlet的交互了,這里這里的教程可以參考參考,在此處我只簡單說明一下,並記錄一下我這次遇到的問題。

整個思路是:寫個js函數,在里面使用XHR(ajax的教程)的open和send方法與服務器進行交互

我遇到的問題是將setRequestHeader的第二個參數設置錯了,導致send發送的數據服務器沒有接收到。正確的形式如下:

xmlHttp.open("POST","newProject",true);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
        xmlHttp.send("newProjectName=" + project_name);

在服務器端使用servlet處理接收到的數據:

@WebServlet("/newProject")
public class ProjectNewServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    ……

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setCharacterEncoding("UTF-8");
        
        String projectName = request.getParameter("newProjectName");
        
        String fileContent = "";
……
}
}

然后就可以對接收到的數據進行處理了,處理完后還可以使用response發送數據給客戶端,客戶端在onreadystatechange綁定的函數里對數據進行處理,這些東西上面的教程有詳解。servlet返回數據的部分代碼如下:

 

response.setContentType("text/xml;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.write(fileContent);
        out.close();

 

fileContent為xml數據

 

事實上,這種使用原始的javascript和ajax有點麻煩,如果直接用jquery的.post或者.get或者.ajax方法,更方便更簡單,js代碼如下:

 

$.post("./newProject",{newProjectName:project_name},
            function(data,status){
        //alert("data:" + data + "status:" + status);
        if(status == "success"){
            var nodes = data.getElementsByTagName("project");
            //alert(nodes[0].getAttribute("name"));
            for(var i = 0;i < nodes.length;i ++){
                $("#project_items").append("<option value=\"" + (i+1) + "\">" + nodes[i].getAttribute("name") + "</option>");    
            }
        }
                
    });

 

"newProject"為上面的servlet的注解路徑,data為servlet返回的xml數據。使用jquery省事很多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM