这是ajax请求提交页面:
<%@ 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>ajax获取数据</title> <script type="text/javascript"> function loadName(){ // 创建XMLHttpRequest var XMLHttp; // 判断浏览器内核是否支持XMLHttpRequest对象 if (window.XMLHttpRequest) { XMLHttp = new XMLHttpRequest; }else { XMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); } // 打印状态 alert("readyState状态:"+XMLHttp.readyState+";status状态:"+XMLHttp.status); // 当状态发生改变时就会调用onreadystatechange事件,重写onreadystatechange XMLHttp.onreadystatechange = function() { // 打印状态 alert("readyState状态:"+XMLHttp.readyState+";status状态:"+XMLHttp.status); if(XMLHttp.readyState == 4 && XMLHttp.status == 200) { // 获取字符串形式的响应数据 alert("XMLHttp.responseText:"+XMLHttp.responseText+";XMLHttp.responseXML:"+XMLHttp.responseXML); document.getElementById("name").value = XMLHttp.responseText; } } /* // 通过XMLHttp对象请求后台(GET方式) // 规定请求的类型、url、是否异步处理 XMLHttp.open("get","getAjaxName?name=李程&age=11",true); // 将请求发送到服务器 XMLHttp.send(); */ /* // 通过XMLHttp对象请求后台(POST方式) // 规定请求的类型、url、是否异步处理 XMLHttp.open("post",true); // 将请求发送到服务器 XMLHttp.send(); */ // 通过XMLHttp对象请求后台(模拟HTML) // 规定请求的类型、url、是否异步处理 XMLHttp.open("post","getAjaxName",true); // 设置头信息 XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); // 将请求发送到服务器 XMLHttp.send("name=李程&age=11"); } </script> </head> <body> <div align="center"> <input type="button" onclick="loadName()" value="Ajax获取数据"><input type="text" id="name" value="" /> </div> </body> </html>
这是处理ajax请求的servlet
package com.java1234.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GetAjaxNameServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { this.doPost(request,response); } protected void doPost(HttpServletRequest request,IOException { // 设置编码 request.setCharacterEncoding("UTF-8"); // 接收参数 String name = request.getParameter("name"); String age = request.getParameter("age"); // 输出 System.out.println("name:"+name+"\nage:"+age); // 返回内容 // 设置返回类型 response.setContentType("text/html;charset=UTF-8"); // 创建输出流 PrintWriter out = response.getWriter(); // 输出 out.print("ajax返回文本"); // 刷新 out.flush(); // 关闭流 out.close(); } }
1.使用get方式请求后台时出现中文乱码,首先保证页面编码,和请求编码设置为utf-8。然后可以在tomcat的server.xml文件中
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" />这句话后面加URIEncoding="UTF-8",如下
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
2.将参数放到send中传到后台时,要在send之前设置头信息,语句为
XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");否则后台接收不到参数。我开始在这句话中还设置了编码信息,但是后台接收不到参数值,去掉编码信息就可以接收了。