javascript 實現原生ajax的幾種方法

來源:互聯網
上載者:User

自從javascript有了各種架構之後,比如jquery,使用ajax已經變的相當簡單了。但有時候為了追求簡潔,可能項目中不需要載入jquery這種龐大的js外掛程式。但又要使用到ajax這種功能該如何辦呢?下面和大家分享幾種利用javascript實現原生ajax的方法。

 實現ajax之前必須要建立一個 XMLHttpRequest 對象。如果不支援建立該對象的瀏覽器,則需要建立 ActiveXObject,具體方法如下:

 

 代碼如下 複製代碼
var xmlHttp;
function createxmlHttpRequest() {
if (window.ActiveXObject) {
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
    xmlHttp=new XMLHttpRequest();

 

(1)下面使用上面建立的xmlHttp實現最簡單的ajax get請求:

 

 代碼如下 複製代碼

function doGet(url){
    // 注意在傳參數值的時候最好使用encodeURI處理一下,以防出現亂碼
    createxmlHttpRequest();
    xmlHttp.open("GET",url);
    xmlHttp.send(null);
    xmlHttp.onreadystatechange = function() {
        if ((xmlHttp.readyState == 4) && (xmlHttp.status == 200)) {
            alert('success');
        } else {
            alert('fail');
        }
    }

(2)使用上面建立的xmlHttp實現最簡單的ajax post請求:

 

 代碼如下 複製代碼
function doPost(url,data){
    // 注意在傳參數值的時候最好使用encodeURI處理一下,以防出現亂碼
    createxmlHttpRequest();
    xmlHttp.open("POST",url);
    xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    xmlHttp.send(data);
    xmlHttp.onreadystatechange = function() {
        if ((xmlHttp.readyState == 4) && (xmlHttp.status == 200)) {
            alert('success');
        } else {
            alert('fail');
        }
    }

下面再分享一個從網上看到的類比jquery的$.ajax方法的封裝:

 

 代碼如下 複製代碼

 

var createAjax = function(){
    var xhr=null;
    try {
        xhr=new ActiveXObject("microsoft.xmlhttp"); // IE系列瀏覽器
    } catch(e1) {
        try{
            xhr=new XMLHttpRequest(); // 非IE瀏覽器
        } catch(e2) {
            window.alert("您的瀏覽器不支援ajax,請更換!");
        }
    }
    return xhr;
};
var ajax=function(conf){
    var type=conf.type; // type參數,可選
    var url=conf.url; // url參數,必填
    var data=conf.data; // data參數可選,只有在post請求時需要
    var dataType=conf.dataType; // datatype參數可選
    var success=conf.success; // 回呼函數可選
    if (type == null) {
        type="get"; // type參數可選,預設為get
    }
    if (dataType == null){
        dataType="text"; // dataType參數可選,預設為text
    }
    var xhr = createAjax();
    xhr.open(type,url,true);
    if (type=="GET" || type=="get") {
        xhr.send(null);
    } else if (type=="POST" || type=="post") {
        xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
        xhr.send(data);
    }
    xhr.onreadystatechange=function(){
        if ((xhr.readyState == 4) && (xhr.status == 200)) {
            if (dataType=="text" || dataType=="TEXT"){
                if (success != null){
                    success(xhr.responseText); // 普通文本
                }
            } else if(dataType=="xml" || dataType=="XML"){
                if (success != null){
                    success(xhr.responseXML); // 接收xml文檔
                }
            } else if (dataType=="json" || dataType=="JSON"){
                if (success != null) {
                    success(eval("("+xhr.responseText+")")); //將json字串轉換為js對象
                }
            }
        }
    };
}; 

該方法使用也很簡單,和jquery的$.ajax方法一樣,不過沒那麼多的參數。僅僅是簡單的實現了一些基本的ajax功能。使用方法如下:

 

 代碼如下 複製代碼

ajax({
    type:"post",//post或者get,非必須
    url:"test.jsp",//必須的
    data:"name=dipoo&info=good",//非必須
    dataType:"json",//text/xml/json,非必須
    success:function(data){//回呼函數,非必須
        alert(data.name);
    }
});

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.