ajax以及一些亂碼問題
2024-09-01 08:29:17
供稿:網友
創建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(){}}
地址 數據 成功回調函數