中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

原生JS封裝Ajax插件(同域、jsonp跨域)
來源:易賢網 閱讀:1150 次 日期:2016-07-06 10:53:56
溫馨提示:易賢網小編為您整理了“原生JS封裝Ajax插件(同域、jsonp跨域)”,方便廣大網友查閱!

這篇文章主要為大家詳細介紹了原生JS封裝Ajax插件,為大家介紹不同域之間互相請求資源的跨域拋出一個問題,其實所謂的熟悉原生JS,怎樣的程度才是熟悉呢?

最近都在做原生JS熟悉的練習。。。

用原生Js封裝了一個Ajax插件,引入一般的項目,傳傳數據,感覺還是可行的。。。簡單說說思路,如有不正確的地方,還望指正^_^

一、Ajax核心,創建XHR對象

Ajax技術的核心是XMLHttpRequest對象(簡稱XHR),IE5是第一款引入XHR對象的瀏覽器,而IE5中的XHR對象是通過MSXML庫中的一個ActiveX對象實現的,因此在IE中可能有3個版本,即MSXML2.XMLHttp、MSXML2.XMLHttp.3.0和MSXML2.XMLHttp.6.0。所以創建XHR對象的時候要用兼容性寫法:

createXHR:function(){

 if(typeof XMLHttpRequest!='undefined'){

 return new XMLHttpRequest();

 }else if(typeof ActiveXObject!='undefined'){

 if(typeof arguments.callee.activeXString!='string'){

  var versions=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],i,len;

  for(i=0,len=versions.length;i<len;i++){

  try{

   new ActiveXObject(versions[i]);

   arguments.callee.activeXString=versions[i];

   break;

  }catch(ex){

  }

  }

  return new ActiveXObject(arguments.callee.activeXString);

  }else{

  throw new Error("No XHR object available.");

 }

}

二、XHR的主要方法屬性

方法:

open()方法:接受3個參數,要發送的請求的類型、請求的URL、是否異步發送的布爾值

send()方法:要作為請求主體發送的數據,如果不需要通過請求主體發送數據,則必須傳入null

abort()方法:在接收到響應之前調用來取消異步請求。

屬性:

responseText:作為響應主體被返回的文本。

status:響應的HTTP狀態

statusText:HTTP狀態說明

readyState:表示請求/響應過程的當前活動階段

取值分別為:

0:未初始化。尚未調用open()方法

1:啟動。已經調用open()方法,但尚未調用send()方法

2:發送。已經調用send()方法,但未接收到響應。

3:接收。已經接受到部分響應數據

4:完成。已經接受到全部響應數據,而且已經可以在客戶端使用了。

本例中的onreadystatechange事件處理函數:

var complete=function(){

 if(xhr.readyState==4){

  if((xhr.status>=200&&xhr.status<300)||xhr.status==304){

  if(params.success){

   params.success(xhr.responseText);//執行調用ajax時指定的success函數

   }

 }else{

  if(params.fail){

  params.fail();//執行調用ajax時指定的fail函數

  }else{

  throw new Error("Request was unsucessful:"+xhr.status);

  }

 }

 }

}

注意:必須在調用open()方法之前指定onreadystatechange事件處理函數才能確保跨瀏覽器兼容性。

三、同域發送請求

①GET請求

最常見的請求類型,常用于查詢某些信息。通過將查詢的字符串參數追加到URL的末尾來將信息發送給服務器。get方法請求需要注意的是,查詢字符串中的每個參數名稱和值都必須使用encodeURIComponent()進行編碼,而且所有名-值對都必須由&號分割。

請求方法:

if((this.config.type=="GET")||(this.config.type=="get")){

 for(var item in this.config.data){

 this.config.url=addURLParam(this.config.url,item,this.config.data[item]);//使用encodeURIComponent()進行編碼

 }

 xhr.onreadystatechange=complete;

 xhr.open(this.config.type,this.config.url,this.config.async);

 xhr.send(null);

}

②POST請求

通常用于向服務器發送應該被保存的數據,POST請求應該把數據作為請求的主體提交。這里將模仿表單提交。即將Content-Type頭部信息設置為application/x-www-form-urlencoded; charset=UTF-8。

序列化函數:

function serialize(data){

 var val="";

 var str="";

 for(var item in data){

  str=item+"="+data[item];

  val+=str+'&';

 }

 return val.slice(0,val.length-1);

}

請求方法:

if(this.config.type=="POST"||this.config.type=="post"){

  xhr.addEventListener('readystatechange',complete);

  xhr.open(this.config.type,this.config.url,this.config.async);

  if(params.contentType){

   this.config.contentType=params.contentType;

   }

  xhr.setRequestHeader("Content-Type",this.config.contentType);

  xhr.send(serialize(this.config.data));

}

兩個請求的一些區別:

 ①GET請求把參數數據寫到URL中,在URL中可以看到,而POST看不到,所以GET不安全,POST較安全。

②GET傳送的數據量較小,不能大于2kb。POST傳送的數據量較大,一般默認為不受限制。

③GET服務器端用Request.QueryString來獲取變量的值,POST服務器端用Request.From來獲取。

④GET將數據添加到URL中來傳遞到服務器,通常利用一個?,后面的參數每一個數據參數以“名稱=值”的形式出現,參數與參數之間利用一個連接符&來區分。POST的數據是放在HTTP主體中的,其組織方式不只一種,有&鏈接方式,也有分隔符方式。可以隱藏參數,傳遞大批數據,比較方便。

四、jsonp跨域發送請求

 首先,跨域是神馬情況呢?

一個域名的組成:

http://     www  .  abc.com:   8080  / scripts/AjaxPlugin.js

協議       子域名      主域名      端口號     請求資源地址

~當協議、子域名、主域名、端口號中任意一個不相同時,都算作不同于。

~不同域之間互相請求資源,就算作“跨域”。

所有的瀏覽器都遵守同源策略,這個策略能夠保證一個源的動態腳本不能讀取或操作其他源的http響應和cookie,這就使瀏覽器隔離了來自不同源的內容,防止它們互相操作。所謂同源是指協議、域名和端口都一致的情況。瀏覽器會阻止ajax請求非同源的內容。

JSONP(JSON with Padding) 是一種跨域請求方式。主要原理是利用了script 標簽可以跨域請求的特點,由其 src 屬性發送請求到服務器,服務器返回 JS 代碼,網頁端接受響應,然后就直接執行了,這和通過 script 標簽引用外部文件的原理是一樣的。但是jsonp跨域只支持get請求。

JSONP由兩部分組成:回調函數和數據,回調函數一般是由網頁端控制,作為參數發往服務器端,服務器端把該函數和數據拼成字符串返回。

jsonp跨域主要需要考慮三個問題:

1、因為 script 標簽的 src 屬性只在第一次設置的時候起作用,導致 script 標簽沒法重用,所以每次完成操作之后要移除;

2、JSONP這種請求方式中,參數依舊需要編碼;

3、如果不設置超時,就無法得知此次請求是成功還是失敗;

由于代碼有點長,就放個計時器的代碼吧,完整代碼見AjaxPlugin

//超時處理

if(params.time){

 scriptTag.timer=setTimeout(function(){

  head.removeChild(scriptTag);

  params.fail&¶ms.fail({message:"over time"});

  window[cbName]=null;

 },params.time);

}

以上就是本文的全部內容,希望對大家的學習有所幫助。

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
性做久久久久久久久| 亚洲欧美在线磁力| 国产精品入口66mio| 国产精品一区在线观看你懂的| 国产欧美va欧美va香蕉在| 国产午夜精品全部视频在线播放| 激情婷婷久久| 亚洲一区二区在线播放| 久久精品在线视频| 欧美午夜精品久久久久久超碰| 欧美性猛交xxxx免费看久久久| 国内激情久久| 一本综合久久| 欧美大片在线观看一区二区| 国产精品免费久久久久久| 在线观看日韩| 亚洲欧美视频在线观看视频| 美女成人午夜| 欧美人交a欧美精品| 国产亚洲女人久久久久毛片| 国产日韩欧美亚洲| 国产精品揄拍500视频| 亚洲国产精品悠悠久久琪琪| 999在线观看精品免费不卡网站| 亚洲欧美影音先锋| 女人色偷偷aa久久天堂| 国产精品日韩在线一区| 亚洲日韩欧美视频| 久久久久免费观看| 国产精品豆花视频| 在线看欧美日韩| 一区二区三区四区蜜桃| 欧美精品99| 在线不卡中文字幕| 欧美一级片久久久久久久| 欧美—级a级欧美特级ar全黄| 国产精品免费看| 亚洲日本成人在线观看| 久久精选视频| 国产亚洲精品aa午夜观看| 亚洲一区二区在线播放| 欧美日韩在线一区二区三区| 国产日韩欧美日韩| 亚洲视频欧美在线| 欧美激情在线观看| 激情久久综艺| 欧美一级大片在线观看| 欧美午夜视频| 亚洲免费电影在线| 欧美国产精品一区| 亚洲黄色影院| 久久综合久久久久88| 国产午夜精品视频| 久久精品视频免费播放| 国产热re99久久6国产精品| 亚洲调教视频在线观看| 欧美日韩色婷婷| 亚洲精选大片| 欧美日韩和欧美的一区二区| 日韩亚洲精品电影| 欧美日韩中文字幕精品| 亚洲色图自拍| 女女同性精品视频| 久久夜色精品国产噜噜av| 国产日韩精品在线| 久久精品国产99国产精品澳门| 国产精品入口麻豆原神| 亚洲免费一区二区| 国产亚洲欧美一区| 老司机久久99久久精品播放免费| 国产一区二区三区不卡在线观看| 久久狠狠一本精品综合网| 国产一区二区精品久久99| 久久九九免费视频| 在线欧美电影| 欧美婷婷六月丁香综合色| 亚洲一区国产视频| 国内视频一区| 欧美成年人在线观看| 亚洲精品久久久久久下一站 | 欧美一进一出视频| 国产精品一区二区在线观看网站 | 伊人久久综合| 欧美国产视频一区二区| 一区二区三区精品在线| 国产毛片一区二区| 美脚丝袜一区二区三区在线观看| 亚洲精品免费看| 国产精品中文在线| 免费试看一区| 亚洲网站视频| 国语自产在线不卡| 欧美黄色精品| 欧美一区三区三区高中清蜜桃| 国产午夜精品福利| 欧美精品www在线观看| 午夜在线视频观看日韩17c| 在线观看亚洲精品视频| 欧美日韩亚洲综合一区| 欧美亚洲色图校园春色| 亚洲美女电影在线| 国产三区精品| 欧美日韩精品一区二区天天拍小说| 午夜精品免费在线| 99re这里只有精品6| 激情久久婷婷| 国产精品久久久久久久久久久久 | 亚洲精品资源美女情侣酒店| 国产精品美女一区二区| 欧美视频日韩视频| 牛夜精品久久久久久久99黑人 | 激情综合在线| 国产精品欧美一区二区三区奶水| 免费在线观看日韩欧美| 欧美一级视频| 亚洲综合精品| 亚洲一区二区伦理| 在线一区二区三区四区| 亚洲国产精品久久久久久女王| 国产精品嫩草影院av蜜臀| 欧美日韩国语| 欧美日韩成人在线观看| 免费在线观看日韩欧美| 老司机精品久久| 免费成人av在线| 欧美aⅴ一区二区三区视频| 久久免费的精品国产v∧| 久久不射2019中文字幕| 99re在线精品| 亚洲成人在线观看视频| 国产精品一国产精品k频道56| 欧美日韩国产综合视频在线观看中文| 久久精品国产第一区二区三区最新章节| 亚洲激情啪啪| 亚洲黄色性网站| 国产在线乱码一区二区三区| 亚洲欧美日韩国产综合| 久久国内精品视频| 欧美影院成年免费版| 欧美一区二区黄| 久久成人精品视频| 久久影音先锋| 欧美激情一区二区| 欧美日韩免费一区二区三区视频| 欧美日韩一级视频| 欧美日韩专区| 国产欧美一区二区色老头| 很黄很黄激情成人| 亚洲激情一区| 亚洲男人的天堂在线观看| 欧美在线视频免费播放| 美腿丝袜亚洲色图| 欧美日韩免费在线视频| 国产精品狼人久久影院观看方式| 国产精品久久一级| 狠狠色香婷婷久久亚洲精品| 亚洲国产经典视频| aa成人免费视频| 久久精品日产第一区二区| 欧美大片va欧美在线播放| 欧美四级剧情无删版影片| 国产精品一区二区三区久久| 在线观看91精品国产麻豆| 亚洲欧洲一二三| 性xx色xx综合久久久xx| 看欧美日韩国产| 欧美视频免费看| 亚洲电影在线看| 亚洲欧美中文在线视频| 久久久久久久高潮| 欧美日韩国产页| 亚洲欧洲一区二区三区在线观看| 亚洲午夜久久久久久久久电影院| 久久九九免费视频| 欧美午夜在线观看| 激情视频一区| 亚洲欧美日韩直播| 欧美国产日本| 韩国在线视频一区| 亚洲一区二区免费看| 欧美高清你懂得| 国产伦精品一区二区三区高清版| 你懂的国产精品| 亚洲国产成人不卡| 久久久久国产精品人| 欧美在线观看日本一区| 久久激情视频| 国产亚洲精品久久飘花| 精品88久久久久88久久久| 亚洲第一综合天堂另类专| 99精品欧美| 亚洲国产精品免费| 欧美一区二区日韩| 欧美日韩国内自拍| 久久亚洲精品视频| 影院欧美亚洲| 欧美日韩一区二区免费视频| 欧美在线视频网站| 久久伊人亚洲| 亚洲大片一区二区三区|