javascript

位置:IT落伍者 >> javascript >> 浏览文章

jQuery调用AJAX时Get和post公用的乱码


发布日期:2022年03月14日
 
jQuery调用AJAX时Get和post公用的乱码

以前在新浪博客写过js调用AJAX时Get和post的乱码解决办法但是使用js代码比较繁琐我们在使用ajax进行数据交互时可以使用js的一个成熟框架jQuery

一个网站的设计不管是注册登录还是分页查找都需要提交参数到服务器以便得到所需的页面数据为了减少用户因刷新页面带来的煎熬ajax诞生但是初学者进行项目开发时会遇到一个很烦人的问题中文乱码下面我就通过一个简单的实例来告诉大家哪些地方可能会导致乱码我们需要通过什么方式来解决我们这个实例主要实现用户注册时用户名是否正确(已存在)在焦点移开username文本text时对username进行异步提交并由servlet进行提取判断并将结果返回页面做出相应提示第一步新建一个web工程(默认GBK格式)取名jQuery_Ajax在其WebRoot目录下新建js文件包将jqueryjs放于其中第二步在src下创建servlet包并编写Valijava代码如下:package servlet;import javaioIOException;import javaioPrintWriter;import javanetURLDecoder;import javaxservletServletException;import javaxservletimportjavaxservletimportjavaxservletpublic class Vali extends HttpServlet {@Overrideprotectedvoid service(HttpServletRequest request HttpServletResponse response)throwsServletException IOException {StringuserName = URLDecoderdecode(requestgetParameter("userName")"utf");Systemoutprintln(userName);responsesetContentType("text/html;charset=utf");PrintWriter pw =responsegetWriter();if(userNameequals("张三")){pwprintln("错误");}else{pwprintln("正确");}}}从可从代码看出含有编码格式的语句便是解决乱码的办法之一在代码中注意URLDecoderdecode(requestgetParameter("userName")"utf")——将页面传来的数据进行格式转换并提取responsesetContentType("text/html;charset=utf")——将响应返回值进行utf编码后返回页面特别注意中的转换需写在本方法内一切的response之前否则可能失效本servlet对数据的格式编码只适合Post方法若提交方式为GET则提取页面数据的代码如下复制代码 代码如下:requestsetCharacterEncoding("utf");StringuserName = requestgetParameter("userName");userName= new String(userNamegetBytes("iso")"utf");第三步编写简单注册页面ajaxjsp代码如下:<%@ page language="java"import="javautil*" pageEncoding="utf"%><%String path = requestgetContextPath();String basePath =requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "//WC//DTDHTML Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP ajaxjsp starting page</title><metahttpequiv="pragma" content="nocache"><metahttpequiv="cachecontrol" content="nocache"><metahttpequiv="expires" content=""><metahttpequiv="keywords"content="keywordkeywordkeyword"><metahttpequiv="description" content="This is my page"><!<linkrel="stylesheet" type="text/css"href="stylescss">><scripttype="text/javascript"src="js/jqueryjs"></script><scripttype="text/javascript">function vali(){$ajax({type:"POST"url:"/jQuery_Ajax/Vali"data:encodeURI(encodeURI("userName="+$(":text")val()))success:function(data){$("span")text(data);}});}</script></head><body>用户名:<inputtype="text" name="userName"onblur="vali();"/><span></span><br/>密码:<inputtype="password" name="password" /></body></html>在代码中注意页面要设置为utf且引入jqueryjsajax通过POST方法传递数据注意data的设置将返回数据填入span标签如果使用GET方法传递页面数据js代码如下代码如下:function vali(){$ajax({type:"GET"url:"/jQuery_Ajax/Vali"data:encodeURI("userName="+$(":text")val())success:function(data){$("span")text(data);}});}最后一步在webxml配置servlet和映射代码如下:<servlet><description>This is the description of my JEEcomponent</description><displayname>This is the display name of my JEEcomponent</displayname><servletname>Vali</servletname><servletclass>servletVali</servletclass></servlet><servletmapping><servletname>Vali</servletname><urlpattern>/Vali</urlpattern></servletmapping>经过以上代码的编写本注册验证的项目已完成将其部署至tomcat并通过网页访问最后总结大神的jQuery乱码问题解决方法 检查页面编码将页面编码设置为utf如下<metahttpequiv="contenttype" content="text/html;charset=utf"> 检查servlet在doPost或doGet方法中添加如下代码responsesetContentType("text/xml;charset=utf"); 修改tomcat文件在TOMCAT_HOME/conf/serverxml文件中增加URIEncoding=”utf”:<Connector port=""protocol="HTTP/" connectionTimeout="" redirectPort=""URIEncoding="utf"/> 在工程中新增过滤器将编码方式设置为utf经过以上四步操作后问题依旧 检查ie的http header查看contentType字段如下contentType:"application/xwwwformurlencoded".检查firefox的http header查看contentType字段如下contentType:"application/xwwwformurlencoded;charset=UTF"对比两步问题出现修改jQueryxxjs文件将contentType:"application/xwwwformurlencoded"改为下面的代码contentType:"application/xwwwformurlencoded;charset=UTF"

上一篇:JS防止用户多次提交

下一篇:JavaScript中的for和iin循环的使用