终极解决MagicAjax提交中文表单乱码的问题[zz]

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

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

 

  大部分人都是说把 magicajax post数据时的那个“loading...”修改成中文,出现乱码,这个好解决,这个汉字在 AjaxCallObject.js 文件里,直接把AjaxCallObject.js文件保存成utf-8就解决了。

  我的问题是:页面上假如有个文本框,输入的是汉字,那么使用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的数据在提交前编码一下,就不会出现中文了。代码如下:

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

AjaxCallObject.prototype.EncodePostData  =   function (data)
{
//由于已经使用了escape方法对postback的值进行了编码,这里不再替换“%”
   //wangzhen 2006-07-06 
    //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");
}

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

if  ( __bPageIsStored  &&  eName  ==   ' __VIEWSTATE '  )
continue ;
var  type  =  curElem.type;
var  val  =  curElem.value;
// 这里对待提交的中文进行编码
                 // wangzhen 2006-07-06
                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 + '&';
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值