ajax與jquery.ajax中文參數post傳遞亂碼處理方法

來源:互聯網
上載者:User

ajax與jquery.ajax中文參數post傳遞亂碼處理方法

今天在做項目時,需要用到Ajax,之前我在用GET方式傳遞中文參數時,只需要在背景程式中設定頁面編碼為GB2312即中文能正常顯示,可是這次由於表單項目較多,不適合用GET方式傳遞,只能用POST方式,但發現背景程式中設定編碼為GB2312時中文還是顯示的亂碼。經過一番研究問題才最終得到解決。

    解決此問題的方法非常簡單,只需要在JS處理參數時用escape()函數處理一下即可,而且不需要再用unescape()解碼,這個方法適合POST和GET方式,具體的Ajax代碼這裡我不例出,這裡給出用escape()函數處理參數時的代碼:

var htmer ="getcode="+escape(getcode)+"&Content="+escape(Content);  //通常我們在處理Ajax的時候會在這裡直接擷取參數的值,為了使中文參數不是亂碼,我們只需要用escape()函數對參數處理下即可。

問題二

當網站頁面不是utf-8編碼時,ajax提交的中文便會變成亂碼,解決方案如下:找到jquery.js裡的contentType:application/x-www-form-urlencoded,將它改成contentType:application/x-www-form-urlencoded; charset=UTF-8就可以了。原因:未指定charset時,jquery使用ISO-8859-1,ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字元。jquery的ajax根本沒有考慮到國際化的問題,而使用了歐洲的字元集,所以傳遞中文時才會出現亂碼

我很久以前一直在使用Prototype架構。在.net-GB2312或jsp教程-utf8下都使用過,從來沒遇到有字元編碼的問題。於是將Prototype和JQuery代碼都下載下來開啟研究原因。

不同之處在於JQuery預設的contentType:application/x-www-form-urlencoded

而Prototype則是contentType:application/x-www-form-urlencoded; charset=UTF-8

這才是JQuery正在亂碼的原因,在未指定字元集的時候,是使用ISO-8859-1

ISO8859-1,通常叫做Latin-1。Latin-1包括了書寫所有西方歐洲語言不可缺少的附加字元。

JQuery的Ajax根本沒有考慮到國際化的問題,使用了歐洲的字元集,所以才引起了傳遞中文出現亂碼的問題。

而我們的UTF-8則可以解決這一問題。

最終指需要修改JQuery的代碼,顯式聲明contentType使用utf-8字元集,即可解決GB2312中文傳遞的問題。

只需要簡單的將JQuery的代碼加以修改,加上charset=UTF-8就可以了,這樣不需要改變改什麼web.config或什麼在頁面中改編碼什麼的了,也不需要用escapc(str)再在服務端解碼。英文怎麼傳遞,中文也怎麼傳遞。

給段簡單的代碼測試一下:

test.html:
複製代碼 代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<script type="text/網頁特效" src="scripts/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function DoAjax(){
$.post("AjaxTest.asp教程x",{txt:$("#tbox1").val()},
function(data){
$("#AjaxResponse").text(data);
}
);
}
</script>
</head>

<body>
<p><a href="javascript:DoAjax();">AjaxTest</a><input name="tbox1" id="tbox1" type="text" /></p>
<div id="AjaxResponse"></div>
</body>
</html>

AjaxTest.aspx:
複製代碼 代碼如下:

<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
<script runat="server">
string parms;

void Page_Load(object sender , EventArgs e)
{
parms=Request["txt"];
if (String.IsNullOrEmpty(parms)){
Response.Write("Is Null");
}else{
Response.Write(parms);
}
}
</script>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.