大部分人都是说把 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 + '&';
}
本文介绍如何解决使用MagicAjax提交中文数据时出现的乱码问题。通过在提交前使用escape函数编码,并调整AjaxCallObject.js文件中的EncodePostData方法,可以有效避免乱码。
1510

被折叠的 条评论
为什么被折叠?



