Ajax传中文值

preview
需积分: 0 1 下载量 110 浏览量 更新于2008-01-31 收藏 22KB DOC 举报
在网页开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,使得用户在不刷新整个页面的情况下与服务器进行交互。在本案例中,我们需要解决一个关键的问题,即如何通过Ajax传输中文值而不会出现乱码。 在描述中提到的场景是一个用户注册流程,当用户输入用户名后,需要实时检查该用户名是否已被其他用户占用。传统的方法是提交整个表单,然后由服务器处理并返回结果。然而,这会导致页面刷新,用户体验不佳。因此,采用Ajax的POST方法来发送请求,可以实现在后台验证用户名的同时保持页面的连续性。 我们创建一个XMLHttpRequest对象,这是Ajax的核心,它允许JavaScript与服务器进行通信。在JavaScript中,我们有以下代码: ```javascript var xmlHttp = false; function createXMLHttpRequest() { if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } } ``` 这里使用了条件语句,以支持不同的浏览器环境,因为旧版IE使用ActiveXObject,而现代浏览器则支持XMLHttpRequest。 接着,我们定义了一个`startRequest`函数,它负责构造POST请求的数据,并发送到服务器: ```javascript function startRequest() { var postStr = "username=" + document.form1.username.value; createXMLHttpRequest(); var url = queryURL(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("POST", url, true); xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttp.send(postStr); } ``` 在这个函数中,我们将表单中用户名字段的值拼接到字符串`postStr`中,然后调用`createXMLHttpRequest()`创建XMLHttpRequest对象,确定请求的URL(这里是`queryURL()`函数的返回值,通常是处理请求的服务器端脚本),设置状态改变的回调函数`handleStateChange`,并使用`setRequestHeader`方法设置请求头,指定数据格式为URL编码。使用`send`方法发送请求。 `queryURL`函数返回服务器端处理请求的URL,通常是一个动态生成的路径,例如: ```javascript function queryURL() { var url = "checknick.jsp"; return url; } ``` 当服务器响应时,`handleStateChange`函数会被调用,根据响应的状态,更新页面上的信息: ```javascript function handleStateChange() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { document.getElementById("check_info").innerHTML = xmlHttp.responseText; } else { document.getElementById("check_info").innerHTML = "hello"; } } } ``` 这里的`readystate`表示请求的进度,`status`是HTTP状态码,200表示请求成功。成功后,将服务器返回的文本内容写入id为"check_info"的div元素,通常是用来显示验证结果。 在服务器端,比如Java的JSP页面`checknick.jsp`中,我们需要解析接收到的POST数据。因为我们在客户端设置了`Content-Type`为`application/x-www-form-urlencoded`,所以服务器端可以像处理普通表单POST请求一样,通过`request.getParameter("username")`来获取“username”的值: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <% String username = request.getParameter("username"); %> <!-- 对username进行验证逻辑 --> <!-- ... --> <!-- 返回结果 --> <% // 假设result是验证结果 out.println(result); %> </body> </html> ``` 确保服务器端页面的字符集设置正确,如上述JSP中的`contentType`和`pageEncoding`,以避免乱码问题。在JSP中,通常使用`contentType="text/html; charset=UTF-8"`来确保响应内容的编码方式与客户端一致。 总结起来,Ajax传输中文值的关键在于:1) 使用URL编码来传递数据;2) 设置请求头`Content-Type`为`application/x-www-form-urlencoded`;3) 服务器端正确解析POST数据并处理字符编码。遵循这些步骤,我们可以有效地解决Ajax传输中文值时可能出现的乱码问题,提供流畅的用户体验。