中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ajax中一些亂碼問題的示例分析

發布時間:2021-10-12 14:31:10 來源:億速云 閱讀:141 作者:小新 欄目:web開發

這篇文章主要介紹了ajax中一些亂碼問題的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創建xmlhttprequest 對象。

復制代碼 代碼如下:

return window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest;


次對象一個 onreadystatechange 事件。有兩個屬性readyState,status。簡單的AJAX我們將使用到這幾個東西。
以下使用到的createXMLHttp()方法就是上面這段代碼!
1:以GET方式發出一個請求的實現;

復制代碼 代碼如下:


var get = function(url, b, callback){
var xmlhttp = createXMLHttp();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
callback(xmlhttp.responseText);
}
}
if(b != undefined){
var arr=[],e;
for( e in b ){
arr.push(e + '=' + encodeURIComponent(b[e]));
//arr.push(e + '=' + b[e]);
// 經過測試如果不使用 encodeURIComponent 編碼在IE8下無法正確傳遞中文
}
url += '?' + arr.join('&');
}
xmlhttp.open('GET', url, true);
xmlhttp.send();
}

// 具體這個函數的參數設置也可以根據自己的習慣來設置


使用GET方式去發送一個請求,我們是把要傳遞的參數格式化(a=1,b=2) 以后附加到URL的后面。
服務器頁面使用獲取URL參數的方式即可獲得。(比如Php: $_GET["a"]);
值得注意的是我們在格式化參數的時候 使用到一個 encodeURIComponent()方法進行了編碼是為了不出現亂碼;
其實有3個方法可以完成這個工作。escape,encodeURI,encodeURIComponent,大家可以查下資料。前兩個方法對于一些特殊字符還是沒有進行編碼。
所以使用第3個是比較好的選擇了。
如果你不使用編碼直接發送數據,各個瀏覽器的表現可能不一樣。比如IE你在發送中文數據的時候就會出現亂碼(當然出現亂碼的情況還很多,請接著看..)。

2:以POST方法發送一個請求的實現

復制代碼 代碼如下:


var ajax = function(a){
var xmlhttp = createXMLHttp();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200 ){
a.success(xmlhttp.responseText);
} else return xmlhttp;
}
xmlhttp.open('POST', a.url, true);
// 請求為post的時候 必須設置頭信息
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
// 序列化要發送的數據
var c = [];
for(var e in a.data){
c.push(e + '=' + encodeURIComponent(a.data[e]));
// 經過測試 經過URL編碼以后更能夠保證發送數據的正確性。
      //不編碼可能造成部分特殊字符不能正確發送
}
a.data = c.join('&');
xmlhttp.setRequestHeader("Content-length", c.length); // 好像是可選
xmlhttp.setRequestHeader("Connection", "close"); // 好像是可選
xmlhttp.send(a.data);
// 次數據發送以后服務端 使用 post 獲取數據 比如php $_POST['a'];
}


參數a是一個對象 他包含 {url:"http:...",data:{a:1,b2},success:function(){}}
             地址 數據 成功回調函數  
使用POST方法發出請求。數據也必須格式化(a=1,b=2) ;不過跟GET方法不一樣的地方是 我們是把數據寫在了send()方法里(xmlhttp.send(a.data);)。
服務器頁面使用獲取表單數據的方式即可獲得。(比如Php: $_POST["a"]);
值得注意的是在使用post發送請求的時候 我們必須設置請求的頭信息。
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
經過測試如果不設置Content-type為application/x-www-form-urlencoded;服務器頁面是無法獲取到通過send()方法發送的數據。

最后 關于亂碼的問題。上面已經有兩個地方會出現錯誤了。
1:比如參數沒有進行編碼直接傳遞,會出現傳遞不成功的問題。
2:在使用POST方法的時候沒有設置Content-type,服務器頁面無法獲取發送過來的參數;
3:發送請求頁面與請求頁面的編碼問題。在標準瀏覽器下請一定保持請求頁面和被請求頁面的編碼方式是utf-8,不然中文會很悲劇。

復制代碼 代碼如下:


<!--<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />-->
<!--// 經過測試 不使用上面的meta 申明charset在IE下會出現亂碼-->
<!--
* header("Content-Type: text/html; charset=gb2312");
被調用的AJAX頁面使用了gb2312的編碼 在chorme下出現了亂碼。
在IE下正常訪問
-->

上面這里出現亂碼的情況非常亂,不好排除。所以保持兩個頁面編碼為UTF-8 參數編碼后在傳遞。可以有效防止亂碼

感謝你能夠認真閱讀完這篇文章,希望小編分享的“ajax中一些亂碼問題的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平山县| 濉溪县| 西昌市| 治多县| 红桥区| 渭南市| 平顶山市| 桐乡市| 元氏县| 灵宝市| 朔州市| 南充市| 晋州市| 潜江市| 红河县| 溧水县| 安丘市| 青河县| 文安县| 枞阳县| 济南市| 兴安县| 大荔县| 双柏县| 大冶市| 蒙阴县| 灌南县| 乌拉特中旗| 南阳市| 鄂托克前旗| 博野县| 岢岚县| 通海县| 阜南县| 高碑店市| 昌平区| 正安县| 辽源市| 楚雄市| 湖北省| 开阳县|