1.jQuery中ajax提交错误的细节:
在$.ajax()中,在data中以json形式存储时,key值为常量,就算是变量,不会把它当做变量来处理,直接把他的变量名看作一个字符串常量存储,当提交时发现未按自己认为的方式提交时,这可能是其中一个原因。而value值可以是变量,也可以是常量,当其中的变量是一个未定义的变量时,可能就会出问题了。如下代码,data中,上传时以test=test123的形式上传,因此key值可以不加双引号时不要认为value值也可以不加双引号,否则上传容易出问题。
var test = "test123";
$.ajax({
type:"get",
url:"emailveryfy",
data:{test:test},
success:function(data){},
dataType:"json"
});
2.jQuery中submit()提交无反应细节:
在使用submit()对form表单进行提交时,需要注意对其中的id不要取名为“submit”,否则提交时会没有反应,这个命名可能是与submit()的名字冲突了,错误代码如下,可以将按钮的id修改为其他的名字。
<script type="text/javascript">
$(function(){
$("submit").click(function(){
$("form").submit();
});
});
</script>
<form action="tourl" method="get">
<input id="submit" type="button"/>
</form>
3.动态创建的按钮事件添加细节:
在使用代码装载完后进行对点击事件添加时,需要注意动态创建的按钮在装载完之后是不存在的,所以在那时候添加动态创建的事件是没有效果的,可以在创建该节点的js方法中在创建完后对其进行事件的添加。4.ajax乱码问题:
jQuery中ajax似乎对gbk的支持不是特别的好,不论怎么修改contentType,gbk的中文都会乱码。解决乱码问题的可以使用下列方法:
1.仅将相关的后台类改为utf-8格式并以utf-8返回数据,在$.ajax中添加contentType: "application/x-www-form-urlencoded; charset=UTF-8"属性。
$.ajax({
type:"get",
url:"al/community.do",
success:function(data){
if(data){
showlist.push(data);
console.log(data);
}
},
contentType: "application/x-www-form-urlencoded; charset=utf-8",
dataType:"json"
});
2.通过对中文进行编码和解码。后台以UTF-8的形式编码中文发送到前台,在前台进行解码。这种情况下对datatype为text格式的内容相对方便些,但对json形式的数据可能就不会很方便了,如果想以json形式接收数据,后台需要具体到对json中的每一个中文进行编码,如果不这样,前台也需要对每一个中文解码,这样会很麻烦,基本上不会使用。对json的接收其实可以改为以text形式接收,即dataType:"text",这样台可以直接对最终的json进行编码发送到前台,前台也可以接收到数据,后通过decodeURIComponent对text数据进行解码。注意,不要使用decodeURI进行解码,decodeURI解码时不会解码符号的,这样会导致后面通过JSON解析成json失败。
$.ajax({
type:"get",
url:"al/searchquestion",
data:{"pattern":encodeURI(pattern)},
success:function(data){
if(data!=null){
var cdata =decodeURIComponent(data);
jdata = JSON.parse(cdata);
console.log(data);
for(var i = 0;i < jdata.length;i++){
var $question = $("<div style='margin-lefet:70px;margin-top:60px;'></div>");
var $link = $("<a href='javascript:void(0)' qid='"+jdata[i].questionid+"' οnclick='addid(this)'></a>");
var str = i+1+"."+jdata[i].question;
$link.html(str);
$question.append($link);
$seaques.append($question);
}
}
},
dataType:"text"
});
3.可以通过out进行字节码的形式返回前台,这种方法在学servlet的时候应该都使用过,就不作介绍了。