成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

深入淺出Ajax

megatron / 3476人閱讀

摘要:在接收響應(yīng)期間持續(xù)不斷地觸發(fā)。在請(qǐng)求發(fā)生錯(cuò)誤時(shí)觸發(fā)。在通信完成或者觸發(fā)或事件后觸發(fā)。已經(jīng)接收到部分響應(yīng)數(shù)據(jù)?;跇?biāo)準(zhǔn)被廣泛支持。破壞程序的異常處理機(jī)制。

原文(我的GitHub):https://github.com/liangfengbo/frontend-ability/issues/1

學(xué)習(xí)大綱

理解Ajax的工作原理

Ajax核心-XMLHttpRequest對(duì)象

封裝Ajax方法

Ajax優(yōu)缺點(diǎn)

Ajax適應(yīng)場(chǎng)景

Ajax系列面試題總結(jié)

Ajax的工作原理 含義:
1. w3chool官網(wǎng):Ajax 是一種在無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下,能夠更新部分網(wǎng)頁(yè)的技術(shù)。
2. 我的理解:無(wú)須刷新頁(yè)面即可從服務(wù)器取得數(shù)據(jù)的技術(shù)。
原理:

Ajax的工作原理相當(dāng)于在用戶和服務(wù)器之間加了—個(gè)中間層,使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請(qǐng)求都提交給服務(wù)器,像—些數(shù)據(jù)驗(yàn)證和數(shù)據(jù)處理等都交給Ajax引擎自己來(lái)做, 只有確定需要從服務(wù)器讀取新數(shù)據(jù)時(shí)再由Ajax引擎代為向服務(wù)器提交請(qǐng)求。

核心XMLHttpRequest對(duì)象
Ajax技術(shù)的核心是XMLHttpRequest對(duì)象。

IE5 XHR對(duì)象是通過(guò)MSXML庫(kù)中的一個(gè)ActiveX對(duì)象實(shí)現(xiàn)的,所以要考慮做兼容。

IE7+、Firefox、Opera、Chrome和Safari都支持原生的XHR對(duì)象

new ActiveXObject(versions);

new XMLHttpRequest();
XMLHttpRequest 對(duì)象方法描述
方法 描述
abort() 停止當(dāng)前請(qǐng)求
getAllResponseHeaders() 把HTTP請(qǐng)求的所有響應(yīng)首部作為鍵/值對(duì)返回
getResponseHeader("header") 返回指定首部的串值
open("method","URL",[asyncFlag],["userName"],["password"]) 建立對(duì)服務(wù)器的調(diào)用。method參數(shù)可以是GET、POST或PUT。url參數(shù)可以是相對(duì)URL或絕對(duì)URL。這個(gè)方法還包括3個(gè)可選的參數(shù),是否異步,用戶名,密碼
send(content) 向服務(wù)器發(fā)送請(qǐng)求
setRequestHeader("header", "value") 把指定首部設(shè)置為所提供的值。在設(shè)置任何首部之前必須先調(diào)用open()。設(shè)置header并和請(qǐng)求一起發(fā)送 ("post"方法一定要 )
XMLHttpRequest 對(duì)象屬性描述
屬性 描述
onreadystatechange 狀態(tài)改變的事件觸發(fā)器,每個(gè)狀態(tài)改變時(shí)都會(huì)觸發(fā)這個(gè)事件處理器,通常會(huì)調(diào)用一個(gè)JavaScript函數(shù)
readyState 請(qǐng)求的狀態(tài)。有5個(gè)可取值:0 = 未初始化,1 = 正在加載,2 = 已加載,3 = 交互中,4 = 完成
responseText 服務(wù)器的響應(yīng),返回?cái)?shù)據(jù)的文本。
responseXML 服務(wù)器的響應(yīng),返回?cái)?shù)據(jù)的兼容DOM的XML文檔對(duì)象 ,這個(gè)對(duì)象可以解析為一個(gè)DOM對(duì)象。
responseBody 服務(wù)器返回的主題(非文本格式)
responseStream 服務(wù)器返回的數(shù)據(jù)流
status 服務(wù)器的HTTP狀態(tài)碼(如:404 = "文件末找到" 、200 ="成功" ,等等)
statusText 服務(wù)器返回的狀態(tài)文本信息 ,HTTP狀態(tài)碼的相應(yīng)文本(OK或Not Found(未找到)等等)
XMLHttpRequest進(jìn)度事件
事件 描述
loadstart 在接收到響應(yīng)數(shù)據(jù)的第一個(gè)字節(jié)時(shí)觸發(fā)。
progress 在接收響應(yīng)期間持續(xù)不斷地觸發(fā)。
error 在請(qǐng)求發(fā)生錯(cuò)誤時(shí)觸發(fā)。
abort 在因?yàn)檎{(diào)用abort()方法而終止連接時(shí)觸發(fā)。
load 在接收到完整的響應(yīng)數(shù)據(jù)時(shí)觸發(fā)。
loadend 在通信完成或者觸發(fā)error、abort或load事件后觸發(fā)。
封裝ajax方法
/**
 * 創(chuàng)建Ajax
 * @param options
 */
function Ajax(options) {
  // 新建一個(gè)對(duì)象,用途接受XHR對(duì)象
  var xhr = null;

  // 第一步創(chuàng)建XMLHttpRequest對(duì)象 || 同時(shí)兼任IE
  // 首先檢測(cè)原生XHR對(duì)象是否存在,如果存在則返回它的新實(shí)例
  if (typeof XMLHttpRequest != "undefined") {
    xhr = new XMLHttpRequest();

    // 然后如果原生對(duì)象不存在,則檢測(cè)ActiveX對(duì)象
  } else if (typeof ActiveXObject != "undefined") {

    // 如果存在,則創(chuàng)建他的對(duì)象,但這個(gè)對(duì)象需要一個(gè)傳入?yún)?shù),如下:
    if (typeof arguments.callee.activeXString != "string") {
      // 對(duì)象版本
      var versions = [
        "Microsoft.XMLHTTP",
        "Msxml2.XMLHTTP.7.0",
        "Msxml2.XMLHTTP.6.0",
        "Msxml2.XMLHTTP.5.0",
        "Msxml2.XMLHTTP.4.0",
        "MSXML2.XMLHTTP.3.0",
        "MSXML.XMLHTTP"
      ], i, len;

      for (i = 0, len = versions.length; i < len; i++) {
        try {
          // 需要versions數(shù)組中的某個(gè)項(xiàng),數(shù)組的7個(gè)項(xiàng)分別對(duì)應(yīng)7個(gè)版本.
          new ActiveXObject(versions[i]);

          // arguments是javascript函數(shù)的內(nèi)置對(duì)象,代表傳入?yún)?shù)的集合,
          // callee就代表對(duì)象本身即new createXHR
          arguments.callee.activeXString = versions[i];
          break;

        } catch (e) {
          // 跳過(guò)
        }
      }
    }
    // 直到循環(huán)創(chuàng)建成功為止,然后給自己添加一個(gè)屬性叫activeXString
    xhr = new ActiveXObject(arguments.callee.activeXString);

  } else {
    // 如果這兩種對(duì)象都不存在,就拋出一個(gè)錯(cuò)誤
    throw new Error("No XHR object available");
  }

  /**
   ** options形參解析:
   * data 發(fā)送的參數(shù),格式為對(duì)象類型
   * url 發(fā)送請(qǐng)求的url,服務(wù)器地址(api)
   * async 否為異步請(qǐng)求,true為異步的,false為同步的
   * method http連接的方式,包括POST和GET兩種方式
   */
  options = options || {};
  options.success = options.success || function () {
  };
  options.fail = options.fail || function () {
  };

  var data = options.data,
       url = options.url,
       async = options.async === undefined ? true : options.async,
       method = options.method.toUpperCase(),
       dataArr = [];

  // 遍歷參數(shù)
  for (var k in data) {
    dataArr.push(k + "=" + data[k]);
  }

  // GET請(qǐng)求
  if (method === "GET") {
    url = url + "?" + dataArr.join("&");
    xhr.open(method, url.replace(/?$/g, ""), async);
    xhr.send();
  }

  // POST請(qǐng)求
  if (method === "POST") {
    xhr.open(method, url, async);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send(dataArr.join("&"));
  }

  // 響應(yīng)接收完畢后將觸發(fā)load事件
  xhr.onload = function () {

    /**
     * XHR對(duì)象的readyState屬性
     * 0:未初始化。尚未調(diào)用open()方法。
     * 1:?jiǎn)?dòng)。已經(jīng)調(diào)用open()方法,但尚未調(diào)用send()方法。
     * 2:發(fā)送。已經(jīng)調(diào)用send()方法,但尚未接收到響應(yīng)。
     * 3:接收。已經(jīng)接收到部分響應(yīng)數(shù)據(jù)。
     * 4:完成。已經(jīng)接收到全部響應(yīng)數(shù)據(jù),而且已經(jīng)可以在客戶端使用了。
     */
    if (xhr.readyState == 4) {
      // 得到響應(yīng)
      if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
        // 處理成功數(shù)據(jù)
        var res;
        if (options.success && options.success instanceof Function) {
          res = xhr.responseText;
          if (typeof res === "string") {
            res = JSON.parse(res);
            options.success.call(xhr, res);
          }
        }
      } else {
        // 處理錯(cuò)誤數(shù)據(jù)
        if (options.fail && options.fail instanceof Function) {
          options.fail.call(xhr, res)
        }
      }

    } else {
      // 拋出檢測(cè)XHR對(duì)象的readyState屬性
      console.log("XHR was readyState:", xhr.readyState);
    }
  }
}
options參數(shù)說(shuō)明
參數(shù) 類型 描述 默認(rèn)值 是否填
url string 發(fā)送請(qǐng)求的url,服務(wù)器地址(api) "" 必填
method string http連接的方式,包括POST和GET兩種方式 true 選填
async boolean 是否為異步請(qǐng)求,true為異步的,false為同步的 true 選填
data json 發(fā)送的參數(shù),格式為對(duì)象(json)類型 null 選填
success function 請(qǐng)求成功回調(diào)函數(shù) function () { } 必填
fail function 請(qǐng)求失敗回調(diào)函數(shù) function () { } 必填
示例:
Ajax({
  url: "http://localhost:3000/api/v1/article",
  method: "GET",
  async: true,
  success: function (res) {
    console.log("successful", res);
  },
  fail: function (err) {
    console.log("fail", err);
  }
})
成功返回?cái)?shù)據(jù):
successful {code: 200, msg: "查詢文章列表成功!", data: {…}}

Ajax優(yōu)點(diǎn) 1.無(wú)刷新更新數(shù)據(jù)。

AJAX最大優(yōu)點(diǎn)就是能在不刷新整個(gè)頁(yè)面的前提下與服務(wù)器通信維護(hù)數(shù)據(jù)。這使得Web應(yīng)用程序更為迅捷地響應(yīng)用戶交互,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒(méi)有改變的信息,減少用戶等待時(shí)間,帶來(lái)非常好的用戶體驗(yàn)。

2.異步與服務(wù)器通信。

AJAX使用異步方式與服務(wù)器通信,不需要打斷用戶的操作,具有更加迅速的響應(yīng)能力。優(yōu)化了Browser和Server之間的溝通,減少不必要的數(shù)據(jù)傳輸、時(shí)間及降低網(wǎng)絡(luò)上數(shù)據(jù)流量。

3.前端和后端負(fù)載平衡。

AJAX可以把以前一些服務(wù)器負(fù)擔(dān)的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來(lái)處理,減輕服務(wù)器和帶寬的負(fù)擔(dān),節(jié)約空間和寬帶租用成本。并且減輕服務(wù)器的負(fù)擔(dān),AJAX的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請(qǐng)求和響應(yīng)對(duì)服務(wù)器造成的負(fù)擔(dān),提升站點(diǎn)性能。

4.基于標(biāo)準(zhǔn)被廣泛支持。

AJAX基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載瀏覽器插件或者小程序,但需要客戶允許JavaScript在瀏覽器上執(zhí)行。隨著Ajax的成熟,一些簡(jiǎn)化Ajax使用方法的程序庫(kù)也相繼問(wèn)世。同樣,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù),為那些不支持JavaScript的用戶提供替代功能。

5.界面與應(yīng)用分離。

Ajax使WEB中的界面與應(yīng)用分離(也可以說(shuō)是數(shù)據(jù)與呈現(xiàn)分離),有利于分工合作、減少非技術(shù)人員對(duì)頁(yè)面的修改造成的WEB應(yīng)用程序錯(cuò)誤、提高效率、也更加適用于現(xiàn)在的發(fā)布系統(tǒng)。

Ajax缺點(diǎn) 1.AJAX干掉了Back和History功能,即對(duì)瀏覽器機(jī)制的破壞。

在動(dòng)態(tài)更新頁(yè)面的情況下,用戶無(wú)法回到前一個(gè)頁(yè)面狀態(tài),因?yàn)闉g覽器僅能記憶歷史記錄中的靜態(tài)頁(yè)面。一個(gè)被完整讀入的頁(yè)面與一個(gè)已經(jīng)被動(dòng)態(tài)修改過(guò)的頁(yè)面之間的差別非常微妙;用戶通常會(huì)希望單擊后退按鈕能夠取消他們的前一次操作,但是在Ajax應(yīng)用程序中,這將無(wú)法實(shí)現(xiàn)

2.AJAX的安全問(wèn)題

JAX技術(shù)給用戶帶來(lái)很好的用戶體驗(yàn)的同時(shí)也對(duì)IT企業(yè)帶來(lái)了新的安全威脅,Ajax技術(shù)就如同對(duì)企業(yè)數(shù)據(jù)建立了一個(gè)直接通道。這使得開(kāi)發(fā)者在不經(jīng)意間會(huì)暴露比以前更多的數(shù)據(jù)和服務(wù)器邏輯。Ajax的邏輯可以對(duì)客戶端的安全掃描技術(shù)隱藏起來(lái),允許黑客從遠(yuǎn)端服務(wù)器上建立新的攻擊。還有Ajax也難以避免一些已知的安全弱點(diǎn),諸如跨站點(diǎn)腳步攻擊、SQL注入攻擊和基于Credentials的安全漏洞等等

3.對(duì)搜索引擎支持較弱。

對(duì)搜索引擎的支持比較弱。如果使用不當(dāng),AJAX會(huì)增大網(wǎng)絡(luò)數(shù)據(jù)的流量,從而降低整個(gè)系統(tǒng)的性能。

4.破壞程序的異常處理機(jī)制。

至少?gòu)哪壳翱磥?lái),像Ajax.dll,Ajaxpro.dll這些Ajax框架是會(huì)破壞程序的異常機(jī)制的。關(guān)于這個(gè)問(wèn)題,曾在開(kāi)發(fā)過(guò)程中遇到過(guò),但是查了一下網(wǎng)上幾乎沒(méi)有相關(guān)的介紹。后來(lái)做了一次試驗(yàn),分別采用Ajax和傳統(tǒng)的form提交的模式來(lái)刪除一條數(shù)據(jù)……給我們的調(diào)試帶來(lái)了很大的困難

5.AJAX不能很好支持移動(dòng)設(shè)備。

一些手持設(shè)備(如手機(jī)、PDA等)現(xiàn)在還不能很好的支持Ajax,比如說(shuō)我們?cè)谑謾C(jī)的瀏覽器上打開(kāi)采用Ajax技術(shù)的網(wǎng)站時(shí),它目前是不支持的。

Ajax適用場(chǎng)景

表單驅(qū)動(dòng)的交互

深層次的樹(shù)的導(dǎo)航

快速的用戶與用戶間的交流響應(yīng)

類似投票、yes/no等無(wú)關(guān)痛癢的場(chǎng)景

對(duì)數(shù)據(jù)進(jìn)行過(guò)濾和操縱相關(guān)數(shù)據(jù)的場(chǎng)景

普通的文本輸入提示和自動(dòng)完成的場(chǎng)景

Ajax不適用場(chǎng)景

部分簡(jiǎn)單的表單

搜索

基本的導(dǎo)航

替換大量的文本

對(duì)呈現(xiàn)的操縱

Ajax常見(jiàn)面試題: 1、Ajax是什么?如何創(chuàng)建一個(gè)Ajax?

Ajax并不算是一種新的技術(shù),全稱是asychronous javascript and xml,可以說(shuō)是已有技術(shù)的組合,主要用來(lái)實(shí)現(xiàn)客戶端與服務(wù)器端的異步通信效果,實(shí)現(xiàn)頁(yè)面的局部刷新,早期的瀏覽器并不能原生支持ajax,可以使用隱藏幀(iframe)方式變相實(shí)現(xiàn)異步效果,后來(lái)的瀏覽器提供了對(duì)ajax的原生支持

使用ajax原生方式發(fā)送請(qǐng)求主要通過(guò)XMLHttpRequest(標(biāo)準(zhǔn)瀏覽器)、ActiveXObject(IE瀏覽器)對(duì)象實(shí)現(xiàn)異步通信效果

基本步驟:

var xhr =null;//創(chuàng)建對(duì)象 

if(window.XMLHttpRequest){

xhr = new XMLHttpRequest();

}else{

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

xhr.open(“方式”,”地址”,”標(biāo)志位”);//初始化請(qǐng)求 

xhr.setRequestHeader(“”,””);//設(shè)置http頭信息 

xhr.onreadystatechange =function(){}//指定回調(diào)函數(shù) 

xhr.send();//發(fā)送請(qǐng)求 

js框架(jQuery/EXTJS等)提供的ajax API對(duì)原生的ajax進(jìn)行了封裝,熟悉了基礎(chǔ)理論,再學(xué)習(xí)別的框架就會(huì)得心應(yīng)手,好多都是換湯不換藥的內(nèi)容

2、同步和異步的區(qū)別?

同步:阻塞的

張三叫李四去吃飯,李四一直忙得不停,張三一直等著,直到李四忙完兩個(gè)人一塊去吃飯,瀏覽器向服務(wù)器請(qǐng)求數(shù)據(jù),服務(wù)器比較忙,瀏覽器一直等著(頁(yè)面白屏),直到服務(wù)器返回?cái)?shù)據(jù),瀏覽器才能顯示頁(yè)面

異步:非阻塞的

張三叫李四去吃飯,李四在忙,張三說(shuō)了一聲然后自己就去吃飯了,李四忙完后自己去吃,瀏覽器向服務(wù)器請(qǐng)求數(shù)據(jù),服務(wù)器比較忙,瀏覽器可以自如的干原來(lái)的事情(顯示頁(yè)面),服務(wù)器返回?cái)?shù)據(jù)的時(shí)候通知瀏覽器一聲,瀏覽器把返回的數(shù)據(jù)再渲染到頁(yè)面,局部更新

3、如何解決跨域問(wèn)題?

理解跨域的概念:協(xié)議、域名、端口都相同才同域,否則都是跨域

出于安全考慮,服務(wù)器不允許ajax跨域獲取數(shù)據(jù),但是可以跨域獲取文件內(nèi)容,所以基于這一點(diǎn),可以動(dòng)態(tài)創(chuàng)建script標(biāo)簽,使用標(biāo)簽的src屬性訪問(wèn)js文件的形式獲取js腳本,并且這個(gè)js腳本中的內(nèi)容是函數(shù)調(diào)用,該函數(shù)調(diào)用的參數(shù)是服務(wù)器返回的數(shù)據(jù),為了獲取這里的參數(shù)數(shù)據(jù),需要事先在頁(yè)面中定義回調(diào)函數(shù),在回調(diào)函數(shù)中處理服務(wù)器返回的數(shù)據(jù),這就是解決跨域問(wèn)題的主流解決方案

4、頁(yè)面編碼和被請(qǐng)求的資源編碼如果不一致如何處理?

對(duì)于ajax請(qǐng)求傳遞的參數(shù),如果是get請(qǐng)求方式,參數(shù)如果傳遞中文,在有些瀏覽器會(huì)亂碼,不同的瀏覽器對(duì)參數(shù)編碼的處理方式不同,所以對(duì)于get請(qǐng)求的參數(shù)需要使用encodeURIComponent函數(shù)對(duì)參數(shù)進(jìn)行編碼處理,后臺(tái)開(kāi)發(fā)語(yǔ)言都有相應(yīng)的解碼api。對(duì)于post請(qǐng)求不需要進(jìn)行編碼

5、簡(jiǎn)述ajax的過(guò)程。

創(chuàng)建XMLHttpRequest對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用對(duì)象

創(chuàng)建一個(gè)新的HTTP請(qǐng)求,并指定該HTTP請(qǐng)求的方法、URL及驗(yàn)證信息

設(shè)置響應(yīng)HTTP請(qǐng)求狀態(tài)變化的函數(shù)

發(fā)送HTTP請(qǐng)求

獲取異步調(diào)用返回的數(shù)據(jù)

使用JavaScript和DOM實(shí)現(xiàn)局部刷新

6、闡述一下異步加載JS。

異步加載的方案: 動(dòng)態(tài)插入 script 標(biāo)簽

通過(guò) ajax 去獲取 js 代碼,然后通過(guò) eval 執(zhí)行

script 標(biāo)簽上添加 defer 或者 async 屬性

創(chuàng)建并插入 iframe,讓它異步執(zhí)行 js

7、請(qǐng)解釋一下 JavaScript的同源策略?!?/b>

同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標(biāo)準(zhǔn)。它最早出自Netscape Navigator2.0,其目的是防止某個(gè)文檔或腳本從多個(gè)不同源裝載。所謂同源指的是:協(xié)議,域名,端口相同,同源策略是一種安全協(xié)議,指一段腳本只能讀取來(lái)自同一來(lái)源的窗口和文檔的屬性。

8、GET和POST的區(qū)別,何時(shí)使用POST?

GET:一般用于信息獲取,使用URL傳遞參數(shù),對(duì)所發(fā)送信息的數(shù)量也有限制,一般在2000個(gè)字符,有的瀏覽器是8000個(gè)字符

POST:一般用于修改服務(wù)器上的資源,對(duì)所發(fā)送的信息沒(méi)有限制

在以下情況中,請(qǐng)使用 POST 請(qǐng)求:

無(wú)法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫(kù))

向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒(méi)有數(shù)據(jù)量限制)

發(fā)送包含未知字符的用戶輸入時(shí),POST 比 GET 更穩(wěn)定也更可靠

9、ajax是什么?ajax的交互模型?同步和異步的區(qū)別?如何解決跨域問(wèn)題?

通過(guò)異步模式,提升了用戶體驗(yàn)

優(yōu)化了瀏覽器和服務(wù)器之間的傳輸,減少不必要的數(shù)據(jù)往返,減少了帶寬占用

Ajax在客戶端運(yùn)行,承擔(dān)了一部分本來(lái)由服務(wù)器承擔(dān)的工作,減少了大用戶量下的服務(wù)器負(fù)載。

10、 Ajax的最大的特點(diǎn)是什么。

Ajax可以實(shí)現(xiàn)異步通信效果,實(shí)現(xiàn)頁(yè)面局部刷新,帶來(lái)更好的用戶體驗(yàn);按需獲取數(shù)據(jù),節(jié)約帶寬資源;

11、ajax的缺點(diǎn)

1、ajax不支持瀏覽器back按鈕。

2、安全問(wèn)題 AJAX暴露了與服務(wù)器交互的細(xì)節(jié)。

3、對(duì)搜索引擎的支持比較弱。

4、破壞了程序的異常機(jī)制。

12、ajax請(qǐng)求的時(shí)候get和post方式的區(qū)別

get一般用來(lái)進(jìn)行查詢操作,url地址有長(zhǎng)度限制,請(qǐng)求的參數(shù)都暴露在url地址當(dāng)中,如果傳遞中文參數(shù),需要自己進(jìn)行編碼操作,安全性較低。

post請(qǐng)求方式主要用來(lái)提交數(shù)據(jù),沒(méi)有數(shù)據(jù)長(zhǎng)度的限制,提交的數(shù)據(jù)內(nèi)容存在于http請(qǐng)求體中,數(shù)據(jù)不會(huì)暴漏在url地址中。

13、解釋jsonp的原理,以及為什么不是真正的ajax

Jsonp并不是一種數(shù)據(jù)格式9,而json是一種數(shù)據(jù)格式,jsonp是用來(lái)解決跨域獲取數(shù)據(jù)的一種解決方案,具體是通過(guò)動(dòng)態(tài)創(chuàng)建script標(biāo)簽,然后通過(guò)標(biāo)簽的src屬性獲取js文件中的js腳本,該腳本的內(nèi)容是一個(gè)函數(shù)調(diào)用,參數(shù)就是服務(wù)器返回的數(shù)據(jù),為了處理這些返回的數(shù)據(jù),需要事先在頁(yè)面定義好回調(diào)函數(shù),本質(zhì)上使用的并不是ajax技術(shù)

14、什么是Ajax和JSON,它們的優(yōu)缺點(diǎn)。

Ajax是全稱是asynchronous JavaScript andXML,即異步JavaScript和xml,用于在Web頁(yè)面中實(shí)現(xiàn)異步數(shù)據(jù)交互,實(shí)現(xiàn)頁(yè)面局部刷新。

優(yōu)點(diǎn):可以使得頁(yè)面不重載全部?jī)?nèi)容的情況下加載局部?jī)?nèi)容,降低數(shù)據(jù)傳輸量,避免用戶不斷刷新或者跳轉(zhuǎn)頁(yè)面,提高用戶體驗(yàn)

缺點(diǎn):對(duì)搜索引擎不友好;要實(shí)現(xiàn)ajax下的前后退功能成本較大;可能造成請(qǐng)求數(shù)的增加跨域問(wèn)題限制;

JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,ECMA的一個(gè)子集

優(yōu)點(diǎn):輕量級(jí)、易于人的閱讀和編寫(xiě),便于機(jī)器(JavaScript)解析,支持復(fù)合數(shù)據(jù)類型(數(shù)組、對(duì)象、字符串、數(shù)字)

15、http常見(jiàn)的狀態(tài)碼有那些?分別代表是什么意思?

200 - 請(qǐng)求成功

301 - 資源(網(wǎng)頁(yè)等)被永久轉(zhuǎn)移到其它URL

404 - 請(qǐng)求的資源(網(wǎng)頁(yè)等)不存在

500 - 內(nèi)部服務(wù)器錯(cuò)誤

16、一個(gè)頁(yè)面從輸入 URL到頁(yè)面加載顯示完成,這個(gè)過(guò)程中都發(fā)生了什么?

分為4個(gè)步驟:

當(dāng)發(fā)送一個(gè) URL 請(qǐng)求時(shí),不管這個(gè) URL 是 Web 頁(yè)面的 URL 還是 Web 頁(yè)面上每個(gè)資源的 URL,瀏覽器都會(huì)開(kāi)啟一個(gè)線程來(lái)處理這個(gè)請(qǐng)求,同時(shí)在遠(yuǎn)程 DNS 服務(wù)器上啟動(dòng)一個(gè) DNS 查詢。這能使瀏覽器獲得請(qǐng)求對(duì)應(yīng)的 IP 地址。

瀏覽器與遠(yuǎn)程 Web 服務(wù)器通過(guò) TCP 三次握手協(xié)商來(lái)建立一個(gè) TCP/IP 連接。該握手包括一個(gè)同步報(bào)文,一個(gè)同步-應(yīng)答報(bào)文和一個(gè)應(yīng)答報(bào)文,這三個(gè)報(bào)文在 瀏覽器和服務(wù)器之間傳遞。該握手首先由客戶端嘗試建立起通信,而后服務(wù)器應(yīng)答并接受客戶端的請(qǐng)求,最后由客戶端發(fā)出該請(qǐng)求已經(jīng)被接受的報(bào)文。

一旦 TCP/IP 連接建立,瀏覽器會(huì)通過(guò)該連接向遠(yuǎn)程服務(wù)器發(fā)送 HTTP 的 GET 請(qǐng)求。遠(yuǎn)程服務(wù)器找到資源并使用 HTTP 響應(yīng)返回該資源,值為 200 的 HTTP 響應(yīng)狀態(tài)表示一個(gè)正確的響應(yīng)。

此時(shí),Web 服務(wù)器提供資源服務(wù),客戶端開(kāi)始下載資源。

17、ajax請(qǐng)求的時(shí)候get和post方式的區(qū)別

get一般用來(lái)進(jìn)行查詢操作,url地址有長(zhǎng)度限制,請(qǐng)求的參數(shù)都暴露在url地址當(dāng)中,如果傳遞中文參數(shù),需要自己進(jìn)行編碼操作,安全性較低。

post請(qǐng)求方式主要用來(lái)提交數(shù)據(jù),沒(méi)有數(shù)據(jù)長(zhǎng)度的限制,提交的數(shù)據(jù)內(nèi)容存在于http請(qǐng)求體中,數(shù)據(jù)不會(huì)暴漏在url地址中。

18、ajax請(qǐng)求時(shí),如何解釋json數(shù)據(jù)
使用eval() 或者JSON.parse() 鑒于安全性考慮,推薦使用JSON.parse()更靠譜,對(duì)數(shù)據(jù)的安全性更好。

參考文檔

JavaScript高級(jí)程序設(shè)計(jì)第三版
AJAX工作原理及其優(yōu)缺點(diǎn)
Ajax原理以及優(yōu)缺點(diǎn)
Ajax的工作原理
Ajax系列面試題總結(jié)01

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/96057.html

相關(guān)文章

  • 深入了解ajax

    摘要:而由于安全風(fēng)險(xiǎn)的原因,被禁止使用。就好比單線程一樣,請(qǐng)求發(fā)出后就進(jìn)入阻塞狀態(tài),直到解除阻塞,余下的代碼才會(huì)繼續(xù)執(zhí)行。安全問(wèn)題暴露了與服務(wù)器交互的細(xì)節(jié)。破壞了程序的異常機(jī)制。服務(wù)器端暫時(shí)無(wú)法處理請(qǐng)求可能是過(guò)載或維護(hù)。 AJAX全稱Asynchronous JavaScript and XML(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。它有機(jī)地包含了以下...

    zhouzhou 評(píng)論0 收藏0
  • JSONP跨域訪問(wèn)API接口深入理解

    摘要:說(shuō)明關(guān)于跨域問(wèn)題的解決方案多達(dá)七八種,你不要說(shuō)哪有這么多,我不跟你較真哈,你也別跟我較真哈自行百度或這里不會(huì)跟你說(shuō)那么多種只說(shuō)使用最多的一種你要非說(shuō)用的不是最多的我不信哦你信好了哈哈你開(kāi)心就好關(guān)于跨域?yàn)g覽器的同源策略要了解什么是跨域你需要了 說(shuō)明 關(guān)于跨域問(wèn)題的解決方案多達(dá)七、八種,你不要說(shuō)哪有這么多,我不跟你較真哈,你也別跟我較真哈, ?!自行 百度 或 Google, 這里不會(huì)跟你...

    tunny 評(píng)論0 收藏0
  • 前端基礎(chǔ)匯總

    摘要:及相關(guān)問(wèn)題數(shù)據(jù)類型函數(shù)中指向原型作用域閉包面向?qū)ο髮?duì)象創(chuàng)建模式繼承嚴(yán)格模式與對(duì)象轉(zhuǎn)換的方法添加屬性,根據(jù)原型創(chuàng)建區(qū)別新特性解構(gòu)賦值簡(jiǎn)化對(duì)象寫(xiě)法剪頭函數(shù)三點(diǎn)運(yùn)算符模板字符串形參默認(rèn)值異步過(guò)程深拷貝與淺拷貝賦值與淺拷貝的區(qū)別淺拷貝的幾種方法實(shí)現(xiàn) js及es相關(guān)問(wèn)題 數(shù)據(jù)類型函數(shù)中this指向——————原型作用域閉包——————面向?qū)ο髮?duì)象創(chuàng)建模式繼承——————Es5嚴(yán)格模式Json與j...

    2json 評(píng)論0 收藏0
  • 前端基礎(chǔ)匯總

    摘要:及相關(guān)問(wèn)題數(shù)據(jù)類型函數(shù)中指向原型作用域閉包面向?qū)ο髮?duì)象創(chuàng)建模式繼承嚴(yán)格模式與對(duì)象轉(zhuǎn)換的方法添加屬性,根據(jù)原型創(chuàng)建區(qū)別新特性解構(gòu)賦值簡(jiǎn)化對(duì)象寫(xiě)法剪頭函數(shù)三點(diǎn)運(yùn)算符模板字符串形參默認(rèn)值異步過(guò)程深拷貝與淺拷貝賦值與淺拷貝的區(qū)別淺拷貝的幾種方法實(shí)現(xiàn) js及es相關(guān)問(wèn)題 數(shù)據(jù)類型函數(shù)中this指向——————原型作用域閉包——————面向?qū)ο髮?duì)象創(chuàng)建模式繼承——————Es5嚴(yán)格模式Json與j...

    laznrbfe 評(píng)論0 收藏0
  • 深入理解JQuery中的on方法(事件委派機(jī)制)

    摘要:它是一個(gè)過(guò)濾器的作用,只有被選中元素的后代元素才會(huì)觸發(fā)事件。替換是引入的,目的是通過(guò)祖先元素來(lái)代理委派后代元素的事件綁定問(wèn)題,某種程度上和優(yōu)點(diǎn)相似。相關(guān)資料深入理解新的綁定事件機(jī)制方法的使用新的事件綁定機(jī)制 前言 在開(kāi)發(fā)項(xiàng)目的時(shí)候,JQuery的使用極其廣泛,如果腦海中沒(méi)有一點(diǎn)JQuery的基礎(chǔ)知識(shí),隨性編寫(xiě),那么就有可能造成bug問(wèn)題。JQuery 1.4版本之后新增了on方法,這個(gè)...

    ckllj 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<