婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 圖文解析AJAX的原理

圖文解析AJAX的原理

熱門標(biāo)簽:ai機器人電銷資源 騰訊地圖標(biāo)注位置能用多久 超級大富翁地圖標(biāo)注 云呼外撥網(wǎng)絡(luò)電話系統(tǒng) 越南河內(nèi)地圖標(biāo)注 地圖標(biāo)注項目怎么樣 機器人電銷騙局揭秘 個人怎樣在百度地圖標(biāo)注地名 硅語電話機器人公司

先上原理圖:

 

 

 

背景:

     1.傳統(tǒng)的Web網(wǎng)站,提交表單,需要重新加載整個頁面。

     2.如果服務(wù)器長時間未能返回Response,則客戶端將會無響應(yīng),用戶體驗很差。

     3.服務(wù)端返回Response后,瀏覽器需要加載整個頁面,對瀏覽器的負擔(dān)也是很大的。

     4.瀏覽器提交表單后,發(fā)送的數(shù)據(jù)量大,造成網(wǎng)絡(luò)的性能問題。

問題:

     1.如何改進?

     2.AJAX是什么?

     3.有什么優(yōu)勢?

     4.有什么缺點?

一、什么是 AJAX

1.為什么需要AJAX

當(dāng)需要從服務(wù)器獲取數(shù)據(jù),并刷新頁面的操作,如果不采用AJAX,則需要用提交整個表單的方式,當(dāng)提交表單時,發(fā)送請求給服務(wù)器,頁面需要等待服務(wù)器發(fā)送完response后,頁面才能恢復(fù)操作。

2.AJAX的概念:

     1.AJAX = 異步 JavaScript 和 XML。

     2.AJAX 是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術(shù)。

     3.通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換,可以使網(wǎng)頁實現(xiàn)異步更新。

     4.可以在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進行更新。

3.什么叫異步

當(dāng)前頁面發(fā)送一個請求給服務(wù)器,當(dāng)前頁面不需要等待服務(wù)器響應(yīng)才能操作網(wǎng)頁。發(fā)送完請求之后,當(dāng)前頁面可以繼續(xù)瀏覽,操作。

4.什么叫局部刷新

我們可以用兩種方式來實現(xiàn)部分刷新。

1. iframe頁面重載的方式。

這種方式雖然實現(xiàn)了部分刷新,但是是頁面的重載,所以也會帶來性能上的問題。

Step1.在頁面中定義一個Iframe

iframe id="indexFrame" name="index" width="1000" height="800"
    frameborder="0" marginwidth="0" marginheight="0" scrolling="yes" style="margin-top:100px;">/iframe>

Step2.設(shè)置Iframe的src

var indexFrame = document.getElementById("indexFrame");
indexFrame.src = "introduction.php";

Step3.添加一個button的點擊事件,當(dāng)點擊這個button時,重新設(shè)置Iframe的src,實現(xiàn)iframe里面的頁面刷新。Iframe外面的內(nèi)容不刷新。

button id="room" onclick='IndexClick("room")'>Click Me!/button>
function IndexClick(moduleKey) {
 var indexFrame = document.getElementById("indexFrame");
 if(indexFrame == null)
 {
   indexFrame = parent.document.getElementById("indexFrame");
 }
 var url = "introduction.php";
 switch (moduleKey) {
  case "introduction":
   url = "introduction.php";
   break;
  case "room":
   url = "room.php";
   break;
  default:
   {
   }
 }
 indexFrame.src = url;
}

通過這種方式我們可以實現(xiàn)一個導(dǎo)航欄的功能:

    

  2.AJAX方式

    Step1.JavaScrpit發(fā)送異步請求

    Step2.服務(wù)端查詢數(shù)據(jù)庫,返回數(shù)據(jù)

    Step3.服務(wù)端返回Response

    Step4.客戶端根據(jù)返回的Response,來用JavaScript操作DOM。

  看下面的例子:

  

  當(dāng)我們切換DropDownList中的Item時,JavaScript發(fā)送異步請求給Server端,Server端返回數(shù)據(jù),然后JavaScript將數(shù)據(jù)解析出來,拼接了一個Table,將Table呈現(xiàn)在頁面上。

二、提交Form表單的原理

1.代碼

客戶端代碼:

form id="form1" action="Test.ashx" method="get">
   您的姓名1:input type="text" name="fname" size="20" />
   input type="submit" name="submit" value="Sumbit">
 /form>

服務(wù)端代碼:

public void ProcessRequest (HttpContext context)
{
  //Delay
  for (int i = 0; i  2; i++)
  {
   System.Threading.Thread.Sleep(1000);
  }
 
   //從Requset.Form中獲取fname的值。使用Form獲取請求的鍵值對的值的前提條件是HTTP request Content-Type 值必須是"application/x-www-form-urlencoded" 或 "multipart/form-data".
  string fname = context.Request["fname"];
 
  context.Response.ContentType = "text/plain";
 //將字符串寫入 HTTP 響應(yīng)輸出流。
  context.Response.Write("Hello World " + fname);
 }

2.將代碼部署到IIS

3.打開站點:

http://localhost:8003/Test.html

 

4.輸入“Jackson0714”然后點擊Sumbit按鈕,頁面會重新刷新,顯示"Hello World Jackson0714"

5.提交Form表單后,頁面發(fā)送請求和服務(wù)端返回響應(yīng)的流程 

6.通過抓包,我們可以得到HTTP Headers

瀏覽器發(fā)送HTTP給服務(wù)端,采取的協(xié)議是HTTP協(xié)議。

在傳輸過程中,我們可以看下HTTP Headers。

 三、AJAX提交請求和服務(wù)響應(yīng)的原理

1.代碼

客戶端HTML代碼:

!DOCTYPE html>
 
html lang="en" xmlns="http://www.w3.org/1999/xhtml">
head>
 meta charset="utf-8" />
 title>/title>
 script type="text/javascript" src="Ajax.js">/script>
 
/head>
body>
 div id="Test" style="background-color:#40eeee">
  您的姓名2:input type="text" id="testGetName" size="20" />
  button type="button" onclick="testGet();">Ajax Get請求/button>
 /div>
   
 div id="Test" style="background-color:#ff6a00">
  您的姓名3:input type="text" id="testPostName" size="20" />
  button type="button" onclick="testPost();">Ajax Post請求/button>
 /div>
 
 div id="myDiv" />
 
/body>
/html>

客戶端JS代碼:

var xmlhttp = createRequest();
 
function testGet() {
 var fname = document.getElementById("testGetName").value;
 xmlhttp.open("GET", "Test.ashx?fname=" + fname + "random=" + Math.random() , true);
 xmlhttp.onreadystatechange = callback;
 xmlhttp.send(null);
}
 
function testPost() {
 var fname = document.getElementById("testPostName").value;
 xmlhttp.open("POST", "Test.ashx?" + "random=" + Math.random() , true);
 xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
 xmlhttp.onreadystatechange = callback;
 xmlhttp.send("fname="+fname);
 
}
 
function createRequest() {
 var xmlhttp;
 if (window.XMLHttpRequest) {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp = new XMLHttpRequest();
 }
 else {
  // code for IE6, IE5
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 }
 return xmlhttp
}
 
function callback() {
 if (xmlhttp.readyState == 4  xmlhttp.status == 200) {
  document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
 }
}

這里有一點需要注意

var xmlhttp = createRequest(); 。

       1.讓服務(wù)端能夠操作這個變量,如果定義成局部變量,則服務(wù)端返回response時,不能對xmlhttp的屬性賦值。回調(diào)函數(shù)要求request是全局的,才能訪問這個變量和它的屬性值。

       2.定義成全局變量后,可能出現(xiàn)兩個請求或多個請求共享同一個請求對象。而這個請求對象只能存放一個回調(diào)函數(shù)來處理服務(wù)器響應(yīng)。當(dāng)服務(wù)器返回兩個請求的Response后,可能會調(diào)用后指定的回調(diào)函數(shù)。所以可能有兩個完全不同的服務(wù)器響應(yīng)由同一個回調(diào)函數(shù)處理,而這可能并不是正確的處理。解決辦法是創(chuàng)建兩個不同的請求對象。 

服務(wù)端代碼不變。

2.輸入“Jackson0714”然后點擊Sumbit按鈕,頁面不會刷新,在最下面顯示"Hello World Jackson0714"

3.AJAX發(fā)送請求和服務(wù)端返回響應(yīng)的流程

 

 

4.通過抓包,我們可以得到HTTP Headers

瀏覽器發(fā)送HTTP給服務(wù)端,采取的協(xié)議是HTTP協(xié)議。

在傳輸過程中,我們可以看下HTTP Headers:

 

5.AJAX  GET和POST方式區(qū)別

AJAX發(fā)送請求和POST發(fā)送請求的代碼如下:

//GET方式
function testGet() {
 var fname = document.getElementById("testGetName").value;
 xmlhttp.open("GET", "Test.ashx?fname=" + fname + "random=" + Math.random() , true);
xmlhttp.onreadystatechange = callback;
 xmlhttp.send(null);
}
 
//POST方式
function testPost() {
 var fname = document.getElementById("testPostName").value;
 xmlhttp.open("POST", "Test.ashx?" + "random=" + Math.random() , true);
 xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
 xmlhttp.onreadystatechange = callback;
 xmlhttp.send("fname="+fname);
 
}

四、XMLHttpRequest 對象的知識

1.XMLHttpRequest 對象的方法

 2.XMLHttpRequest 對象的屬性

五、JQuery實現(xiàn)AJAX

下面的代碼實現(xiàn)了當(dāng)切換DropDownList的item時,觸發(fā)getWeeklyCalendar方法,用JQuery的類庫方法$.ajax來發(fā)送AJAX請求。

客戶端JQuery代碼

function getWeeklyCalendar(name,currentDate,mode){
 $.ajax({
  type:'POST',
  url:'weekProcess.php',data:'func=getWeeklyCalendername='+name+'currentDate='+currentDate+' mode='+mode,
  success:function(data){
  paintWeeklyCandler(data);
  }
 });
}

后臺成功返回Response后,執(zhí)行paintWeeklyCandler(data)方法

后臺PHP代碼

?phpbr> //定義返回的Response的格式為JSON格式
 header('Content-type: text/json');br> //引入自定義的數(shù)據(jù)庫連接文件
 include 'dbConfig.php';br> //引入自定義的設(shè)置session的文件
 include_once 'session.php';
 /*
 * Function requested by Ajax
 */
 if(isset($_POST['func'])  !empty($_POST['func']))
 {
  switch($_POST['func']){
    case 'getWeeklyCalender':
      getWeeklyCalender($_POST['name'],$_POST['currentDate'],$_POST['mode']);
       break;
     case 'getWeeklyStatus':
      getWeeklyStatus($_POST['name'],$_POST['currentDate'],$_POST['mode']);
      break;
     case 'getEvents':
      getEvents($_POST['date'],$_POST['name']);
      break;
    default:
      break;
 }
}
 function getWeeklyCalender($name = '',$currentDate = '',$mode = '')
 {
  //邏輯代碼br>    br>  br>    //返回JSON格式的Response
  echo json_encode(array('result'=>$DaysOfWeekResultsArray));
 }br>?>

六、優(yōu)勢

     1.使用異步方式與服務(wù)器通信,頁面不需要重新加載,頁面無刷新

     2.按需取數(shù)據(jù),減少服務(wù)器的負擔(dān)

     3.使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶交互

     4.AJAX基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載瀏覽器插件或者小程序,但需要客戶允許JavaScript在瀏覽器上執(zhí)行

     5.瀏覽器的內(nèi)容和服務(wù)端代碼進行分離。頁面的內(nèi)容全部由JAVAScript來控制,服務(wù)端負責(zé)邏輯的校驗和從數(shù)據(jù)庫中拿數(shù)據(jù)。

七、缺點

     1.安全問題:將服務(wù)端的方法暴露出來,黑客可利用這一點進行攻擊

     2.大量JS代碼,容易出錯

     3.Ajax的無刷新重載,由于頁面的變化沒有刷新重載那么明顯,所以容易給用戶帶來困擾——用戶不太清楚現(xiàn)在的數(shù)據(jù)是新的還是已經(jīng)更新過的;現(xiàn)有的解決有:在相關(guān)位置提示、數(shù)據(jù)更新的區(qū)域設(shè)計得比較明顯、數(shù)據(jù)更新后給用戶提示等

     4.可能破壞瀏覽器后退按鈕的正常行為;

     5.一些手持設(shè)備(如手機、PAD等)自帶的瀏覽器現(xiàn)在還不能很好的支持Ajax

八、應(yīng)用場景

     1.對數(shù)據(jù)進行過濾和操縱相關(guān)數(shù)據(jù)的場景

     2.添加/刪除樹節(jié)點

     3.添加/刪除列表中的某一行記錄

     4.切換下拉列表item

     5.注冊用戶名重名的校驗

九、不適用場景

     1.整個頁面內(nèi)容的保存

     2.導(dǎo)航

十、總結(jié)

以上就是本文的全部內(nèi)容,文章寫的很詳細,希望對大家學(xué)習(xí)ajax能有所幫助哦。

您可能感興趣的文章:
  • ajax 技術(shù)和原理分析
  • JQuery的Ajax跨域請求原理概述及實例
  • 利用iframe實現(xiàn)ajax跨域通信的實現(xiàn)原理(圖解)
  • Ajax工作原理深入理解
  • 完成了AJAX樹附原理分析
  • 談?wù)凙jax原理實現(xiàn)過程
  • 關(guān)于Ajax技術(shù)原理的3點總結(jié)
  • AJAX的原理—如何做到異步和局部刷新【實現(xiàn)代碼】
  • 淺析Ajax的 原理及優(yōu)缺點

標(biāo)簽:邢臺 內(nèi)蒙古 遼源 洛陽 林芝 舟山 海南 鄭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《圖文解析AJAX的原理》,本文關(guān)鍵詞  圖文,解析,AJAX,的,原理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《圖文解析AJAX的原理》相關(guān)的同類信息!
  • 本頁收集關(guān)于圖文解析AJAX的原理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    制服丝袜av成人在线看| 五月天丁香久久| 国产美女精品人人做人人爽| 三级精品在线观看| 中文字幕在线不卡一区 | 97精品电影院| 激情成人午夜视频| 国产精品一区在线观看乱码| 日本午夜一本久久久综合| 人人狠狠综合久久亚洲| 人人超碰91尤物精品国产| 一区二区三区精品| 视频在线观看一区| 国产一区二区三区最好精华液| 精品一区二区日韩| 欧美在线看片a免费观看| 在线不卡中文字幕播放| www一区二区| 亚洲黄色小说网站| 强制捆绑调教一区二区| 97精品超碰一区二区三区| 欧美大片一区二区| 亚洲精品久久久久久国产精华液| 亚洲第一二三四区| www.66久久| 国产真实精品久久二三区| 成人短视频下载| 日韩欧美一区二区视频| 亚洲色图另类专区| 国产一区美女在线| 欧美在线免费观看亚洲| 国产精品美女一区二区| 激情久久五月天| 91成人国产精品| 中文字幕一区二区5566日韩| 久久99九九99精品| 日韩午夜在线影院| 天天色天天操综合| 欧美日韩极品在线观看一区| 中文久久乱码一区二区| 99久久精品国产精品久久| 国产喂奶挤奶一区二区三区| 另类调教123区| 欧美成人激情免费网| 美女视频网站久久| 日韩视频免费观看高清完整版在线观看 | 欧美一区二区三区在线观看视频 | 精品捆绑美女sm三区| 国产伦精品一区二区三区免费迷 | 日韩手机在线导航| 看电影不卡的网站| 久久久久久久久99精品| 成人免费毛片高清视频| 午夜精品成人在线视频| 日韩一区二区在线观看视频播放| 久久精品99国产国产精| 中文字幕中文字幕在线一区| 色欧美日韩亚洲| 久久99九九99精品| 亚洲精品乱码久久久久久黑人| 欧美日韩国产综合视频在线观看| 奇米精品一区二区三区四区| 国产精品区一区二区三区| 精品视频一区 二区 三区| 国产乱码精品一品二品| 亚洲成人激情社区| 亚洲色欲色欲www| 久久免费偷拍视频| 日韩一卡二卡三卡国产欧美| 色噜噜久久综合| 国产999精品久久久久久| 免费观看成人av| 日韩制服丝袜先锋影音| 亚洲第一狼人社区| 日韩电影免费在线看| 亚洲成人免费观看| 天天综合网 天天综合色| 亚洲一区二区偷拍精品| 国产精品灌醉下药二区| 91精品久久久久久久99蜜桃| 欧美欧美欧美欧美首页| 欧美性感一区二区三区| 色综合久久综合中文综合网| 色偷偷一区二区三区| 欧美视频在线不卡| 欧美日韩国产在线观看| 欧美一区二区在线免费播放| 91精品福利在线一区二区三区| 日韩欧美一区在线| 亚洲亚洲人成综合网络| 亚洲伦理在线精品| 日韩精品一区第一页| 国产一区二区网址| 91丝袜美女网| 日韩欧美一级在线播放| 精品美女被调教视频大全网站| 中文字幕不卡在线| 亚洲成av人片一区二区三区| 久久国产夜色精品鲁鲁99| 丁香婷婷深情五月亚洲| 欧美丝袜丝交足nylons图片| 日韩精品在线一区二区| 亚洲一区二区黄色| 国产精品亚洲一区二区三区在线| 99久久精品费精品国产一区二区| 91欧美一区二区| 久久久美女艺术照精彩视频福利播放| 国产精品三级电影| 精品在线一区二区| 91精品国产色综合久久ai换脸 | 综合久久给合久久狠狠狠97色 | 日韩你懂的在线观看| 综合久久久久久久| 国产91对白在线观看九色| 欧美草草影院在线视频| 日韩一区欧美二区| 精品视频1区2区| 一区二区免费在线播放| 成人国产视频在线观看| 久久理论电影网| 国产黄人亚洲片| 久久久久九九视频| 精品一区二区免费在线观看| 7777精品伊人久久久大香线蕉| 亚洲自拍偷拍网站| xfplay精品久久| 麻豆视频观看网址久久| 欧美一级欧美三级在线观看| 日韩在线播放一区二区| 日韩免费观看高清完整版| 国产米奇在线777精品观看| 久久久精品黄色| 91首页免费视频| 日韩 欧美一区二区三区| 久久精品亚洲国产奇米99| 成人国产在线观看| 午夜精品在线视频一区| 久久综合狠狠综合久久激情 | 麻豆91免费看| 国产精品夫妻自拍| 欧美大肚乱孕交hd孕妇| 91在线观看视频| 激情都市一区二区| 亚洲国产成人porn| 亚洲精品视频一区| 久久久www成人免费无遮挡大片| 色激情天天射综合网| 国产剧情一区二区| 国内一区二区在线| 国内精品自线一区二区三区视频| 亚洲制服丝袜一区| 亚洲欧美中日韩| 中文字幕一区二| 亚洲视频一区在线| 欧美国产在线观看| 国产午夜精品一区二区 | 欧美va亚洲va在线观看蝴蝶网| 欧美嫩在线观看| 欧美精品久久99| 欧美日韩夫妻久久| 日韩一区二区在线看片| 日韩欧美色综合网站| 欧美精品一区二区三区蜜桃 | 高清成人免费视频| 粉嫩嫩av羞羞动漫久久久 | 在线观看91视频| 免费一级欧美片在线观看| 五月婷婷久久丁香| 日韩av网站免费在线| 久久不见久久见免费视频1| 久久99久久99小草精品免视看| 久久99精品久久久久久动态图| 日韩影院免费视频| 成人黄色软件下载| 91成人免费在线视频| 欧美成人性福生活免费看| 国产精品色噜噜| 日韩成人一级大片| 一本大道久久a久久综合婷婷| 欧美日韩电影在线播放| 久久免费精品国产久精品久久久久| 国产午夜亚洲精品午夜鲁丝片| 最新中文字幕一区二区三区| 午夜精品免费在线| 91国产丝袜在线播放| 久久久久久日产精品| 一区二区三区视频在线看| 国产美女娇喘av呻吟久久| 精品视频在线看| 亚洲柠檬福利资源导航| 经典三级视频一区| 日韩一区二区在线播放| 亚洲.国产.中文慕字在线| 99久久精品免费观看| 中文字幕不卡的av| 成人午夜视频在线观看| 国产婷婷色一区二区三区四区 | 91蜜桃网址入口| 中文字幕精品一区二区精品绿巨人| 日本不卡一区二区三区 |