通过jQuery ajax访问后台action,在自己本地运行没问题但放到远程服务器后每次请求都是Aborted
2015-09-05 22:41
816 查看
最近遇到了一个很痛苦的问题,自己的项目(Struts2+Hibernate+Spring3),出现了这样的情况:我在csdn论坛上提过问却没有人回答,地址为http://bbs.csdn.net/topics/391546445下面是出问题的js代码:JavaScript code?
然后通过上面的url访问后台,后台是这样配置的:首先上Struts2的配置:Plain Text code?
然后是spring的配置:XML/HTML code?
意图是调用CommentAction类里面的execute方法。因为项目较大配置文件与源代码过长就不都放上来了只放了关键的。这个项目在自己电脑的myeclipse编译后放在自己的电脑的tomcat上运行是没有问题的(win7,myeclipse8.6,tomcat-7.0.55),然后放上远程服务器(win 2003,tomcat-7.0.39),就出问题了,每次到这里请求就被服务器挂起,状态显示Aborted,控制台没有报错,firebug也没有,后来发现是根本还没有访问到那个action,服务器还没有响应就没了,状态码为0。发现data如果只有一个参数就能够进去,但我后台方法需要两个参数所以报了空指针。这是Opera的截图:这个问题困扰了好几天都无法解决,暑假就这样无端端浪费近十天,最后只能暂时放下,等到开学回到学校,找了工作室的师兄现场一起调,在这个过程中师兄发现了一个编码问题,因为上面参数content的值是从一个前端编辑器插件UEditor获取用户输入信息的·,这个值里面包含了这个插件指定的格式:<p>content from User</p>.这里面包含了jQuery ajax的非法字符,所以在访问后台Action的时候请求就直接被挂起。解决方法是:在页面上先用两次encodeURIComponent方法对参数content进行编码,因为传进去之后会解码,但结果并不是我们想要的,所以多编码一次来抵消掉这次解码,如下:
<span style="white-space:pre"> </span>function submitReply(flag){ //回答,追问,适用 var content = editor.getContent();
<span style="white-space:pre"> </span>//编码
alert(content);content = encodeURIComponent(encodeURIComponent(content));var contentLength = editor.getContentLength(false);if(contentLength > 2000){alert("输入的字符数太大,请重新输入!");}else if (contentLength != 0) //判断内容是否为空{$.ajax({type: 'POST',url:'subReply.action', //调用了CommentAction.java的execcute()方法data: {flag:flag,content:content},async: false,dataType: 'json',success:function(data){$("#reply_"+flag).val("");loadAnswerAndComment();alert("提交成功!");}});}else{alert("回答内容不能为空!");}}然后在后台进行解码,解码也需要两次,因为第一次解码的结果还是“%3Cp%3E%E6%B5%8B%E8%AF%95%E5%93%88%3C%2Fp%3E”的形式,这段代码的意思是“<p>测试</p>”解码的代码如下:
<span style="white-space:pre"> </span>System.out.println("未转码:" + content);String str = URLDecoder.decode(content,"UTF-8");content = URLDecoder.decode(str,"UTF-8");System.out.println("转码:" + content);URLDecoder来自java.net包。这样就解决了问题了,但是最根本的原因,为什么在本地tomcat上运行的程序没问题,但在学校的服务器就不行,感觉应该是tomcat版本或者配置的问题,试着在tomcat的server.xml的Connect标签上面加上URIEncoding="UTF-8"属性也没用,而且我的tomcat配置与学校服务器的配置是一样的啊?(sercer.xml一样)这个问题会继续深入去了解它。不过也算解决了jQuery Ajax访问后台Action请求被Aborted的问题了。
SSH下通过jQuery ajax访问后台action,在自己本地运行没问题但放到远程服务器后每次请求都是Aborted
相关文章推荐
- jQuery基础学习7——层次选择器find()方法
- jquery选择器(原创)<四>
- JQuery之编写弹窗
- Jquery基础之DOM操作
- JS+jQuery+Easyui实现动态添加控件及赋值
- jQuery带左右按钮控制图片切换
- 如何用JQuery弹出小窗口(是注册页面)提交表单form
- jQuery-选择器
- jquery easyui树形
- jQuery右侧选项卡焦点图片轮播特效代码分享
- jQuery EasyUI总结
- jQuery焦点图轮播特效代码分享(3款)
- jQuery插件
- 完整的Jquery-easyUI显示分页数据例子
- jQuery——index()的用法分析
- jquery 获取设置值、添加元素详解
- JQuery - 垂直显示隐藏DIV
- 用JQUERY的deferred异步按顺序调用后端API
- jquery选择器(原创)<四>
- Jquery操作select