为了使用Ajax,需要定义XmlHttpRequest对象,但是不同浏览器的支持不相同,尤其是IE 和FF不同。
在项目中,需要进行前后台异步交流,同时JSP页面和后台服务器的编码设置都为UTF-8,所以以为使用XmlHttpRequest中的方法进行传参时,能不用但是乱码问题,但是IE又一次让我失望了,还是出现了乱码。代码如下
function treeAddChildClassAjax(parentid,cName,cDescribe) { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { var itemNum = xmlhttp.responseText; if(itemNum.length>7) { alert(itemNum); }else { tree.insertNewItem(tree.getSelectedItemId(),itemNum,cName,0,0,0,0,'SELECT'); fixImage(itemNum); alert(itemNum+"添加成功!"); } } } xmlhttp.open("GET","serviceDetailInfo!insertChildClass?parentid="+parentid+"&className="+cName+"&classDescribe="+cDescribe,true); xmlhttp.send(); }
其中,主要是对于异步交互时使用了“Get”方式,而Get方法的话是将参数放到URL的后面然后传递到服务器,在FF中没问题,不用转格式就能成功获取到参数,但是在IE中死活获取不到,一直是乱码,具体怎么回事还是没解决,后面解决的方法是换一种方式和后台交互,使用“Post”方法,它默认是将参数以UTF-8的格式传递的,而且也不会放到url上去,所以在IE下顺利实现,代码如下。
function treeAddChildClassAjax(parentid,cName,cDescribe) { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { var itemNum = xmlhttp.responseText; if(itemNum.length>7) { alert(itemNum); }else { tree.insertNewItem(tree.getSelectedItemId(),itemNum,cName,0,0,0,0,'SELECT'); fixImage(itemNum); alert(itemNum+"添加成功!"); } } } var content = "parentid="+parentid+"&className="+cName+"&classDescribe="+cDescribe; xmlhttp.open("POST","serviceDetailInfo!insertChildClass",true); xmlhttp.setRequestHeader("Content-Length",content.length); xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); //xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencode;charset=UTF-8"); xmlhttp.send(content); }
不过还是有问题,不知道是不是weblogic的问题,用FF中提交时,处理时出现了不支持UTF-8编码的问题,使得不能使得FF顺利运行,现在只处理到这一步,看看还有没有其他解决方法。