1. 程式人生 > >原生Ajax的幾種實現方法

原生Ajax的幾種實現方法

在基於資料的應用中,使用者需求的資料如聯絡人列表,可以從獨立於實際網頁的服務端取得並且可以被動態地寫入網頁中,給緩慢的Web應用體驗著色使之像桌面應用一樣。自從js有了各種框架之後,比如jquery,使用ajax已經變的相當簡單了。但有時候為了追求簡潔,可能專案中不需要載入jquery這種龐大的js外掛。但又要使用到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);
    }
});

功能該如何辦呢?下面和大家分享幾種利用javascript實現原生ajax的方法。
一、首先實現ajax之前必須要建立一個 XMLHttpRequest 物件的。如果不支援建立該物件的瀏覽器,則需要建立 ActiveXObject,具體方法如下:

var xmlHttp;
function createxmlHttpRequest(){
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest)
xmlHttp=new XMLHttpRequest();
}

二、下面使用上面建立的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');
        }
    }
}

三、使用上面建立的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{//IE系列瀏覽器
       xhr=new ActiveXObject("microsoft.xmlhttp");
   }catch(e1){
       try{//非IE瀏覽器
           xhr=new XMLHttpRequest();
       }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){//接收xml文件
                   success(xhr.responseXML);
               }
           }else if(dataType=="json"||dataType=="JSON"){
               if(success!=null){//將json字串轉換為js物件
                   success(eval("("+xhr.responseText+")"));
               }
           }
       }
   };
};

五、該方法使用也很簡單,和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);
    }
});

以上這幾種javascript實現原生ajax的方法你們學會了嗎?

相關推薦

原生Ajax實現方法

在基於資料的應用中,使用者需求的資料如聯絡人列表,可以從獨立於實際網頁的服務端取得並且可以被動態地寫入網頁中,給緩慢的Web應用體驗著色使之像桌面應用一樣。自從js有了各種框架之後,比如jquery,使用ajax已經變的

多線程有實現方法?同步有實現方法?(被問到)

所有 正在 () read 異常 同步 -h 競爭 sync 多線程有兩種實現方法,分別是繼承Thread類與實現Runnable接口 同步的實現方面有兩種,分別是synchronized,wait與notify wait():使一個線程處於等待狀態,並且釋放所持有的對象的

關於python單例的常用實現方法

let 多個 ember 裝飾 但是 odi code cls 就會 這兩天在看自己之前寫的代碼,所以正好把用過的東西整理一下,單例模式,在日常的代碼工作中也是經常被用到, 所以這裏把之前用過的不同方式實現的單例方式整理一下 裝飾器的方式 這種方式也是工作中經常

Android MaterialDesign之水波點選效果的實現方法

什麼是水波點選的效果? 下面是幾種不同的實現方法的效果圖以及實現方法   Video_2016-08-31_003846 如何實現? 方法一 使用

淺談深拷貝和淺拷貝及實現方法

rgb bsp for ace onos 都是 UNC get con 討論深拷貝與淺拷貝之前,要先回顧一下值傳遞與引用傳遞: 值傳遞: var a = 10; var b = a; b++; //console.log(a,b)//a:10 b:11 引用傳遞: v

圓角ImageView的實現方法

①自定義View import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.grap

C語言中求字串長度的函式my_strlen()的實現方法

C語言中求字串長度的函式的幾種實現方法 1.最常用的方法是建立一個計數器,判斷是否遇到‘\0’,不是’\0’指標就往後加一。 int my_strlen(const char *str) { assert(str != NULL);//此句判段str是否為空指標(事實上這條語

java.util.Timer、Quartz與Spring task定時器任務的實現方法

轉載:https://www.jb51.net/article/106445.htm 一.分類 從實現的技術上來分類,目前主要有三種技術(或者說有三種產品): 1.Java自帶的java.util.Timer類,這個類允許你排程一個java.util.TimerTask任務。使用這種方式

回到頂部的實現方法

  【1】使用預設連結錨點 新增一個a連結,設定a連結的href屬性值為"#top"即可實現 <body> <div>我在頂部</div> <!-- 很多內容 --> <br><br&g

JAVA之多執行緒概念及其實現方法優劣分析

1. 多執行緒 程式:指令集,靜態的概念 程序:作業系統調動程式,是程式的一次動態執行過程,動態的概念 執行緒:在程序內的多條執行路徑 Ps:單核的話程序都是虛擬模擬出來的,多核處理器才可以執行真正的多執行緒 單核通過CPU排程時間片實現虛擬模擬的多執行緒,比如執行main函式和GC在底層就是多執行

Java將資料資訊寫入檔案檔案的實現方法

Java將資料資訊寫入文字檔案的幾種實現方法 一,FileWritter寫入檔案 FileWritter, 字元流寫入字元到檔案。預設情況下,它會使用新的內容取代所有現有的內容,然而,當指定一個true (布林)值作為FileWritter建構函式的第二個引數,它會保留現有的內容,並追加新內

分散式鎖的實現方法:redis實現分散式鎖

使用失效的方式實現分散式鎖(推薦) import redis.clients.jedis.Jedis; /** * 使用redis實現分散式鎖(推薦) * */ public class JedLock { private static final String LOCK_KEY =

java多執行緒的實現方法

          方法一:繼承Thread類,覆蓋方法run(), public class MyThread extends Thread { int count= 1, number; public MyThread(int num) { number = num;

多執行緒有實現方法?同步有實現方法?

為何要使用同步? java允許多執行緒併發控制,當多個執行緒同時操作一個可共享的資源變數時(如資料的增刪改查),  將會導致資料不準確,相互之間產生衝突,因此加入同步鎖以避免在該執行緒沒有完成操作之前,被其他執行緒的呼叫,  從而保證了該變數的唯一性和準確性。 同步的

C++返回字串函式的實現方法

C++返回字串函式有四種方式: 1。使用堆空間,返回申請的堆地址,注意釋放 2。函式引數傳遞指標,返回該指標 3。返回函式內定義的靜態變數(共享) 4。返回全域性變數 1.使用堆空間,返

多執行緒同步和互斥有哪實現方法

執行緒間的同步方法大體可分為兩類:使用者模式和核心模式。顧名思義,核心模式就是指利用系統核心物件的單一性來進行同步,使用時需要切換核心態與使用者態,而使用者模式就是不需要切換到核心態,只在使用者態完成操作。使用者模式下的方法有:原子操作(例如一個單一的全域性變數),臨界區。核

JS陣列去重的實現方法

//使用indexOf function unique1(arr) { var result=[]; for(var i=0;i<arr.length;i++){ if(result.indexOf(arr[i])==-1){ result.push(ar

JavaScript訪問後臺方法實現方法

最近的專案中需要在客戶端使用JavaScript訪問後臺的方法,嘗試了以下幾種方法: 1.在<%%>中直接書寫程式碼段 2.通過js直接執行button的click()方法 觸發後臺程式碼 3.Ajax 4.將該方法釋出為webservice 通過javascr

【Unity Shader】手遊中高光效果的實現方法

前言         由於手機裝置的效能限制,很多效果的計算都得精簡和優化才能達到目地。而在Unity中的高光效果,也給予了多種不同的方案,有用於主機的,用於手機的,有限制一盞畫素燈的,開發者可以根據

Map執行緒安全實現方法

如果需要使 Map 執行緒安全,大致有這麼四種方法:  1、使用 synchronized 關鍵字,程式碼如下 synchronized(anObject) {    value = map.get(key); } 2、使用 JDK1.5提供的鎖(j