亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

javascript原生ajax寫法分享

2024-09-01 08:33:43
字體:
來源:轉載
供稿:網友
本文通過2個示例來給大家分享了下原生javascript結合ajax實現數據請求的方法以及原理,非常的簡單實用,有需要的小伙伴可以參考下
 

ajax:一種請求數據的方式,不需要刷新整個頁面;
ajax的技術核心是 XMLHttpRequest 對象;
ajax 請求過程:創建 XMLHttpRequest 對象、連接服務器、發送請求、接收響應數據;

/** * 得到ajax對象 */function getajaxHttp() {  var xmlHttp;  try {    //chrome, Firefox, Opera 8.0+, Safari    xmlHttp = new XMLHttpRequest();    } catch (e) {      // Internet Explorer      try {        //IE5,6        xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");      } catch (e) {      try {        //IE7以上        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");      } catch (e) {        alert("您的瀏覽器不支持AJAX!");        return false;      }    }  }  return xmlHttp;}/** * 發送ajax請求 * url--url * methodtype(post/get) * con (true(異步)|false(同步)) * parameter(參數) * functionName(回調方法名,不需要引號,這里只有成功的時候才調用) * (注意:這方法有二個參數,一個就是xmlhttp,一個就是要處理的對象) * obj需要到回調方法中處理的對象 */function ajaxrequest(url,methodtype,con,parameter,functionName,obj){  var xmlhttp=getajaxHttp();  xmlhttp.onreadystatechange=function(){         // readyState值說明     // 0,初始化,XHR對象已經創建,還未執行open     // 1,載入,已經調用open方法,但是還沒發送請求     // 2,載入完成,請求已經發送完成     // 3,交互,可以接收到部分數據       // status值說明     // 200:成功     // 404:沒有發現文件、查詢或URl     // 500:服務器產生內部錯誤      if(xmlhttp.readyState==4&& XHR.status == 200){      //HTTP響應已經完全接收才調用      functionName(xmlhttp,obj);    }  };  xmlhttp.open(methodtype,url,con);  xmlhttp.send(parameter);}//這就是參數function createxml(){  var xml="<user><userid>asdfasdfasdf<//userid><//user>";//"//"這不是大寫V而是轉義是左斜杠和右斜杠  return xml;}//這就是參數function createjson(){  var json={id:0,username:"好人"};  return json;}function c(){  alert("");}

//測試

ajaxrequest("http://www.baidu.com","post",true,createxml(),c,document);

我們再來看一個示例

ajax({    url: "./TestXHR.aspx",       //請求地址    type: "POST",            //請求方式    data: { name: "super", age: 20 },    //請求參數    dataType: "json",    success: function (response, xml) {      // 此處放成功后執行的代碼    },    fail: function (status) {      // 此處放失敗后執行的代碼    }  });  function ajax(options) {    options = options || {};    options.type = (options.type || "GET").toUpperCase();    options.dataType = options.dataType || "json";    var params = formatParams(options.data);    //創建 - 非IE6 - 第一步    if (window.XMLHttpRequest) {      var xhr = new XMLHttpRequest();    } else { //IE6及其以下版本瀏覽器      var xhr = new ActiveXObject('Microsoft.XMLHTTP');    }    //接收 - 第三步    xhr.onreadystatechange = function () {      if (xhr.readyState == 4) {        var status = xhr.status;        if (status >= 200 && status < 300) {          options.success && options.success(xhr.responseText, xhr.responseXML);        } else {          options.fail && options.fail(status);        }      }    }    //連接 和 發送 - 第二步    if (options.type == "GET") {      xhr.open("GET", options.url + "?" + params, true);      xhr.send(null);    } else if (options.type == "POST") {      xhr.open("POST", options.url, true);      //設置表單提交時的內容類型      xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");      xhr.send(params);    }  }  //格式化參數  function formatParams(data) {    var arr = [];    for (var name in data) {      arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name]));    }    arr.push(("v=" + Math.random()).replace(".",""));    return arr.join("&");  }

我們來看看原理

1、創建

1.1、IE7及其以上版本中支持原生的 XHR 對象,因此可以直接用: var oAjax = new XMLHttpRequest();

1.2、IE6及其之前的版本中,XHR對象是通過MSXML庫中的一個ActiveX對象實現的。有的書中細化了IE中此類對象的三種不同版本,即MSXML2.XMLHttp、MSXML2.XMLHttp.3.0 和 MSXML2.XMLHttp.6.0;個人感覺太麻煩,可以直接使用下面的語句創建: var oAjax=new ActiveXObject('Microsoft.XMLHTTP');

2、連接和發送

2.1、open()函數的三個參數:請求方式、請求地址、是否異步請求(同步請求的情況極少,至今還沒用到過);

2.2、GET 請求方式是通過URL參數將數據提交到服務器的,POST則是通過將數據作為 send 的參數提交到服務器;

2.3、POST 請求中,在發送數據之前,要設置表單提交的內容類型;

2.4、提交到服務器的參數必須經過 encodeURIComponent() 方法進行編碼,實際上在參數列表”key=value”的形式中,key 和 value 都需要進行編碼,因為會包含特殊字符。每次請求的時候都會在參數列表中拼入一個 “v=xx” 的字符串,這樣是為了拒絕緩存,每次都直接請求到服務器上。

encodeURI() :用于整個 URI 的編碼,不會對本身屬于 URI 的特殊字符進行編碼,如冒號、正斜杠、問號和井號;其對應的解碼函數 decodeURI();
encodeURIComponent() :用于對 URI 中的某一部分進行編碼,會對它發現的任何非標準字符進行編碼;其對應的解碼函數 decodeURIComponent();

3、接收

3.1、接收到響應后,響應的數據會自動填充XHR對象,相關屬性如下
responseText:響應返回的主體內容,為字符串類型;
responseXML:如果響應的內容類型是 "text/xml" 或 "application/xml",這個屬性中將保存著相應的xml 數據,是 XML 對應的 document 類型;
status:響應的HTTP狀態碼;
statusText:HTTP狀態的說明;

3.2、XHR對象的readyState屬性表示請求/響應過程的當前活動階段,這個屬性的值如下
0-未初始化,尚未調用open()方法;
1-啟動,調用了open()方法,未調用send()方法;
2-發送,已經調用了send()方法,未接收到響應;
3-接收,已經接收到部分響應數據;
4-完成,已經接收到全部響應數據;

只要 readyState 的值變化,就會調用 readystatechange 事件,(其實為了邏輯上通順,可以把readystatechange放到send之后,因為send時請求服務器,會進行網絡通信,需要時間,在send之后指定readystatechange事件處理程序也是可以的,我一般都是這樣用,但為了規范和跨瀏覽器兼容性,還是在open之前進行指定吧)。

3.3、在readystatechange事件中,先判斷響應是否接收完成,然后判斷服務器是否成功處理請求,xhr.status 是狀態碼,狀態碼以2開頭的都是成功,304表示從緩存中獲取,上面的代碼在每次請求的時候都加入了隨機數,所以不會從緩存中取值,故該狀態不需判斷。

4、ajax請求是不能跨域的!



注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲午夜国产成人av电影男同| 欧美午夜激情视频| 日韩av网站导航| 国产性猛交xxxx免费看久久| 色婷婷成人综合| 国产精品久久久久久超碰| 国内精品国产三级国产在线专| 亚洲永久免费观看| 久久九九热免费视频| 国产精品美女主播在线观看纯欲| 人人澡人人澡人人看欧美| 国产精品视频yy9099| 欧美日韩一区二区在线| 国产精品视频久| 日韩成人av在线| 亚洲国产成人久久综合| 精品国产1区2区| 91色视频在线观看| 国产精品自拍偷拍视频| 欧美一级电影免费在线观看| 一区二区三区四区精品| 欧美成人性生活| 日韩av免费看| 国产激情久久久久| 国产欧美日韩精品在线观看| 成人性生交大片免费看小说| 97av在线影院| 亚洲国产成人久久| 亚洲人成啪啪网站| 91沈先生作品| x99av成人免费| 国产精品美女免费视频| 亚洲激情视频在线观看| 美日韩精品免费观看视频| 国产亚洲免费的视频看| 最近2019中文字幕一页二页| 亚洲人成网站免费播放| 日韩在线观看网站| 欧美日韩国产丝袜另类| 精品福利樱桃av导航| 91国内揄拍国内精品对白| 久久久久成人精品| 国产美女精品视频| 亚洲跨种族黑人xxx| 精品久久久999| 91地址最新发布| 国产一区玩具在线观看| 亚洲欧美精品中文字幕在线| 国产精品久久久久久久久粉嫩av| 久久精品国产v日韩v亚洲| 欧美激情2020午夜免费观看| 91高清在线免费观看| 国产一区二区三区免费视频| 成人黄色短视频在线观看| 久久精品99国产精品酒店日本| 欧美精品一二区| 国产做受高潮69| 国产精品激情自拍| www.亚洲成人| 欧美丰满少妇xxxxx做受| 国产亚洲成av人片在线观看桃| 国产一区二区三区日韩欧美| 国产高清在线不卡| 日韩精品高清在线观看| 亚洲欧美日韩在线一区| 欧美日韩国产中文精品字幕自在自线| 亚洲qvod图片区电影| 欧美日韩激情网| 这里精品视频免费| 欧洲精品在线视频| 中文字幕一区二区精品| 国产一区二区三区在线播放免费观看| 国产精品一区二区三区久久| 91精品国产综合久久香蕉的用户体验| 国产精品久久久久9999| 日韩精品视频在线观看网址| 91精品久久久久久久久久久久久久| 久久久中精品2020中文| 日本高清不卡在线| 国产精品91久久久久久| 日韩av中文字幕在线播放| 亚洲人av在线影院| 综合av色偷偷网| 亚洲电影免费观看高清完整版在线观看| 亚洲精品videossex少妇| 国产97人人超碰caoprom| 在线日韩欧美视频| 国产香蕉精品视频一区二区三区| 国产精品午夜一区二区欲梦| 久久精品国产一区二区三区| 欧美日韩国产二区| 精品亚洲精品福利线在观看| 国产精品爽爽ⅴa在线观看| 日韩第一页在线| 日本最新高清不卡中文字幕| 欧美视频一区二区三区…| www.99久久热国产日韩欧美.com| 亚洲女人初尝黑人巨大| 精品亚洲夜色av98在线观看| 国产精品黄页免费高清在线观看| 欧美乱妇高清无乱码| 5566成人精品视频免费| 538国产精品一区二区免费视频| 国产日韩换脸av一区在线观看| 一区二区三区 在线观看视| 亚洲香蕉成人av网站在线观看| 欧美日韩美女视频| 亚洲精品一区在线观看香蕉| 国产脚交av在线一区二区| 国产精品久久久久久久久免费看| 激情懂色av一区av二区av| 伊人伊成久久人综合网站| 韩国福利视频一区| 亚洲成人a**站| 久热在线中文字幕色999舞| 亚洲欧美另类国产| 日韩女优在线播放| 亚洲第一中文字幕在线观看| 久久久精品视频成人| 亚洲一区二区在线播放| 亚洲乱码一区av黑人高潮| 亚洲人成网站免费播放| 国产亚洲美女精品久久久| 日韩电影中文字幕在线| 日韩网站免费观看| 亚洲天堂色网站| 欧美综合一区第一页| 国产精品丝袜白浆摸在线| 亚洲第一av网站| 亚洲精品大尺度| 久久露脸国产精品| 欧美精品18videos性欧美| 日韩毛片在线看| 一区二区国产精品视频| 亚洲天堂av在线免费观看| 精品视频久久久久久久| 日韩欧美国产免费播放| 久久久久久久91| 日韩欧亚中文在线| 国产精品色视频| 91免费精品国偷自产在线| 亚洲a成v人在线观看| 欧美性猛交xxxx富婆| 亚洲国产成人精品电影| 亚洲国产精品中文| 国产精品一区二区三区久久| 亚洲精品久久久久中文字幕欢迎你| 日本免费一区二区三区视频观看| 国产美女久久久| 日日噜噜噜夜夜爽亚洲精品| 国产精品女主播视频| 成人激情视频网| 国产日韩亚洲欧美| 26uuu国产精品视频| 国产欧美 在线欧美| 性欧美xxxx视频在线观看| 亚洲色图美腿丝袜| 97久久超碰福利国产精品…| 91久久国产精品| 国产成人精品一区二区| 日韩男女性生活视频| 青青草精品毛片| 成人妇女免费播放久久久| 成人免费视频在线观看超级碰|