`
seyaa
  • 浏览: 54533 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用jquery 的ajax(get)提交 含%报错问题

阅读更多
如果现在我有一个隐藏文本框一个文本域:
<input type="hidden" id="id"  value="1">
<textarea rows="5" cols="3" id="content"></textarea>
<input type="button" value="确定" id="save" >


目前要做的是把文本框和文本域里面的值提交到后台,同时还要后台处理完后返回一些参数来告诉我有没有提交成功。
Jsp页面最开始要添加的代码:
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
<c:set var="contextPath" value="<%=basePath%>" />


我们可以选择使用原本的ajax 也可以使用jquery中提供的方法。
$("#save").click(function(){
var id = $.trim($("#id").val());
var content = $.trim($("#content").val());
$.ajax({
		    type: "POST",
		    url: "${ctx}/testAction.do?method=save",
		    data: "id="+id+"&content="+content,
	        success: function(msg){
                 if(msg==’success’){
alert();
}
		    }
});
});


在文本域里面输入包含“%”的内容:

后台在action中直接调用在service中的方法,如下:
public void save(Integer id, String content) {
		DetailDO scdo = testDao.getDetailDOById(id);
		if(content!=null&&!"".equals(content)){
			scdo.setContent(content);
		}else{
			scdo.setContent(null);
		}
}


如果在文本域里面你输入的值只有“%“或者“测试内容%”,就会出现以下异常:
2010-9-16 15:32:35 org.apache.tomcat.util.http.Parameters processParameters
警告: Parameters: Character decoding failed. Parameter skipped.
java.io.CharConversionException: EOF
	at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:80)
	at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:46)
	at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:411)
	at ... ... 

输入的值只有“测试内容%测试内容”或者“%测试内容”,就会出现以下异常:
2010-9-16 15:36:00 org.apache.tomcat.util.http.Parameters processParameters
警告: Parameters: Character decoding failed. Parameter skipped.
java.io.CharConversionException: isHexDigit
	at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:85)
	at org.apache.tomcat.util.buf.UDecoder.convert(UDecoder.java:46)
	at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:411)
	at ... ...


其实主要是因为上面的提交方式是把值放在URL中传递到后台,即[color=black]get的方式进行提交,%好像是特殊的字符,于是就出现这样的异常,解决办法。[/color]
1.改为form提交,post提交方式:
<form [b][color=red]method="post"[/color] [/b]id="testForm" name="testForm">
<input type="hidden" id="id"  value="1">
<textarea rows="5" cols="3" id="content"></textarea>
<input type="button" value="确定" id="save" >
</form>

2. 修改提交事件:
首先你应该要知道jquery的validate验证机制,然后你看到下面的方法你就明白是怎么回事了:
$("#testForm").validate({
	submitHandler:function(form) {
		//...//提交之前要执行的操作可以放在这里
		jQuery(form).ajaxSubmit(function(msg){ 
//以ajax方式提交表单(一定要写,不然表单不会被提交)
			这里你就可以做你想做的事情了... ... 
		});
		//...//提交表单完成所要执行的操作可以放在这里
	}
});
	
//保存
$("#save").click(function(){
	var act = "${ctx}/testAction.do?method=save";
	$("#testForm").attr("action",act);
	$("#testForm").submit();
});


上面的解决办法利用了jquery中validate的一种提交方式的回调机制,但是没有使用验证,如果你需要加上你的验证,可以去查询jquery.validate的文章。
分享到:
评论
4 楼 bean5618 2010-09-16  
如果我没记错的话,好像有个函数叫encodeURIComponent
3 楼 sd1992585 2010-09-16  
 
2 楼 seyaa 2010-09-16  
liujun999999 写道
楼主,这个跟jquery没有关系,提交表单的get和post的区别而已

抱歉 !也许是我表诉的不合理,主要是讲述我在使用jquery的时候遇到这个问题和解决这个问题的方法。谢谢你的指出!
1 楼 liujun999999 2010-09-16  
楼主,这个跟jquery没有关系,提交表单的get和post的区别而已

相关推荐

Global site tag (gtag.js) - Google Analytics