Ajax核心技术之XMLHttpRequest(二)

2014-11-24 07:20:36 · 作者: · 浏览: 2
.getParameter("url"); //获取访问的跨域地址url = http://192.168.../AJAX/AJAXServer StringBuffer paramBuffer = new StringBuffer(); Enumeration enu = request.getParameterNames(); boolean flag = false; //定义标志变量,表示是否为拼接的第一个参数 while(enu.hasMoreElements()){ String paramName = (String) enu.nextElement(); if(!paramName.equals("url")){ String paramValue = request.getParameter(paramName); paramValue = URLEncoder.encode(paramValue,"utf-8"); if(!flag){ paramBuffer.append(paramName).append("=").append(paramValue); flag = true; } else { paramBuffer.append("&").append(paramName).append("=").append(paramValue); } } } response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); if(url != null && url.trim().length() > 0){ URL connectUrl = new URL(url); URLConnection connection =connectUrl.openConnection(); connection.setDoOutput(true); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); writer.write(paramBuffer.toString()); writer.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8")); String line; while((line = reader.readLine()) != null){ out.println(line); } writer.close(); reader.close(); } }


对于问题2


(1)响应数据解决中文乱码的方法:保证页面端定义的charset和http响应头的Content-Type中定义的charset一致。


①http响应头的Content-Type中charset设置为utf-8


②仅仅使用"MSXML2.XMLHTTP","Miscrosoft.XMLHTTP"这两个中的一个来创建XMLHttpRequest对象。


(2)请求数据中文乱码解决方法:由于服务器端getParameter()方法会自动进行一次ISO8859规则解码,因此页面端应使用java script中的encodeURI()方法对请求数据进行两次编码,服务器端使用URLDecode(utf-8)进行一次解码。


总结

XMLHttp详细属性、方法介绍:http://www.w3school.com.cn/xmldom/dom_http.asp

Ajax异步交互主要通过XMLHttpRequest对象实现,搜索Suggest、GoogleMap等应用的友好体验使得此对象的使用愈显重要,希望本文对读者更好的使用XMLHttpRequest提供了一定帮助。