MagicAjax支持中文!

本文介绍如何解决使用MagicAjax提交中文数据时出现的乱码问题。通过在提交前使用escape函数编码,并调整EncodePostData方法,成功避免乱码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的问题是:页面上假如有个文本框,输入的是汉字,那么使用magicajax去提交数据到后台,在后台获取到的是乱码。打开magicajax的源码,找到 AjaxCallObject.js文件(之所以还是直接找这个文件,是因为ajax提交数据首先是通过js调用xmlhttp对象,将数据post到后台的,那么,就看看magicajax是不是把这个提交的数据进行了处理),找到使用xmlhttp提交的这段:

AjaxCallObject.prototype.DoAjaxCall =
function(eventTarget, eventArgument, ajaxCallType, ajaxScopeID, additionalData) {...... this.XmlHttp.open("POST", thePage, true); this.XmlHttp.onreadystatechange = function(){ oThis.ReadyStateChange(); }; this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); this.XmlHttp.send(theData); }

可以看出在这里提交了theData数据,我用alert(theData)的方法将数据在提交前显示出来,发现提交的数据都直接显示是中文,然后再跟踪程序到后台,发现就已经是乱码了,这说明这个 AjaxCallObject.js 本身并没有对这个post的数据进行编码处理。

然后,就好办了,使用jscript里的 escape()函数将待post的数据在提交前编码一下,就不会出现中文了。代码如下:

if ( __bPageIsStored && eName == '__VIEWSTATE' ) continue; var type = curElem.type; var val = curElem.value; //这里对待提交的中文进行编码 //vainnetwork
val = escape(val); if ( type == "submit" || type == "button" ) continue; val = this.EncodePostData(val); if ( type == "select-multiple" || type == "select-one" ) { var selectLength = curElem.options.length; var optNameStr = this.EncodePostData(eName); for (var j=0; j < selectLength; j++) if (curElem.options[j].selected) theData = theData + optNameStr + '='
+ escape(curElem.options[j].value) + '&';
//当页面里有dropdownlist时,还有这里的编码也要处理 } else if ( (type != "checkbox" && type != "radio") || curElem.checked ) { theData = theData + this.EncodePostData(eName) + '=' + val + '&'; }

除此之外,还要找到如下这段代码并按注释修改:

AjaxCallObject.prototype.EncodePostData = function(data) { //由于已经使用了escape方法对postback的值进行了编码,这里不再替换“%” //vainnetwork //return data.split("%").join("%25").split("=").join("%3d").
//split("&").join("%26").split("+").join("%2b");
return data.split("=").join("%3d").split("&").join("%26").split("+").join("%2b"); }

这样就解决了所有的中文乱码问题!

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值