亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

阿里前端面試:ajax的底層實現?

阿里前端面試:ajax的底層實現?

慕萊塢森 2018-08-01 14:10:53
剛才阿里電話面試,聊了一下協議,問:https里面能發送http請求嗎?對https沒接觸過,這個問題理所當然沒有底氣回答了;緊接著就問ajax協議(模糊記得他說的是ajax協議,有“協議”倆字,不是十分肯定了,但ajax不是一種技術嗎??),問ajax底層怎么實現的???一下就懵掉了!當他問底層怎么實現的時候,我在想:XMLHttpRequest這個東西怎么實現的,用到什么協議,我確實沒了解過,書本上好像也沒說過。面試完之后我查了一下,我發現大多數博客就是寫的用原生js怎么發送ajax請求的:難道他問的就是怎么用原生js發送ajax請求嗎?我的天哪,這個問題我都能倒背如流啊(;′⌒`)so,請路過的大神解惑,謝謝:1.https里面能發送http請求嗎?2.ajax底層怎么實現的?3.ajax和http協議的關系?補充點其他的問題供吃瓜群眾參考:1.講到跨域的時候,我說了postMessage,然后問:postMessage的實現原理是什么?GG...2.還是跨域相關的,我講到了jsonp,原理肯定要說一下的,然后問:callback函數的名字能不能重復?如果能重復,怎么區別?比如,a、b兩個請求,callback名字一樣,怎樣去區分返回的數據是a的還是b的3.textarea和input有什么區別4.用一個div模擬textarea的實現5.一個頁面dom節點太多,會出現什么問題(應該是卡頓),怎么優化其他的不太記得了,整個面試過程感覺被虐得體無完膚。html我一直以為除了語義化沒啥可問的了,可我們聊了有二十分鐘的html吧,很多問題,也是見識了。。。
查看完整描述

2 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

要底層實現?給你底層C++的偽代碼。

[Exposed=(Window,DedicatedWorker,SharedWorker)]

interface XMLHttpRequestEventTarget : EventTarget {

  // event handlers

  attribute EventHandler onloadstart;

  attribute EventHandler onprogress;

  attribute EventHandler onabort;

  attribute EventHandler onerror;

  attribute EventHandler onload;

  attribute EventHandler ontimeout;

  attribute EventHandler onloadend;

};


[Exposed=(Window,DedicatedWorker,SharedWorker)]

interface XMLHttpRequestUpload : XMLHttpRequestEventTarget {

};


enum XMLHttpRequestResponseType {

  "",

  "arraybuffer",

  "blob",

  "document",

  "json",

  "text"

};


[Constructor,

 Exposed=(Window,DedicatedWorker,SharedWorker)]

interface XMLHttpRequest : XMLHttpRequestEventTarget {

  // event handler

  attribute EventHandler onreadystatechange;


  // states

  const unsigned short UNSENT = 0;

  const unsigned short OPENED = 1;

  const unsigned short HEADERS_RECEIVED = 2;

  const unsigned short LOADING = 3;

  const unsigned short DONE = 4;

  readonly attribute unsigned short readyState;


  // request

  void open(ByteString method, USVString url);

  void open(ByteString method, USVString url, boolean async, optional USVString? username = null, optional USVString? password = null);

  void setRequestHeader(ByteString name, ByteString value);

           attribute unsigned long timeout;

           attribute boolean withCredentials;

  [SameObject] readonly attribute XMLHttpRequestUpload upload;

  void send(optional (Document or BodyInit)? body = null);

  void abort();


  // response

  readonly attribute USVString responseURL;

  readonly attribute unsigned short status;

  readonly attribute ByteString statusText;

  ByteString? getResponseHeader(ByteString name);

  ByteString getAllResponseHeaders();

  void overrideMimeType(DOMString mime);

           attribute XMLHttpRequestResponseType responseType;

  readonly attribute any response;

  readonly attribute USVString responseText;

  [Exposed=Window] readonly attribute Document? responseXML;

};


查看完整回答
反對 回復 2018-08-06
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

A:你在看Ajax底層實現,沒必要吧? 
B:有必要,招人面試時裝B用。

PS:恭喜你從coding farmer升級為coding chef

其實對于Ajax理解幾個關鍵詞就夠了,異步/回調/線程,至于怎么做的,真的沒必要太深入。

你這么理解:

Ajax是告訴瀏覽器給我要發送一個HTTP請求,你給我新開個線程去執行下,完事后告訴我一聲,我在其他function中執行后續操作(回調)。在線程返回結果前,我可以繼續做其他事情。(異步

Ajax的工作原理,如圖:

https://img1.sycdn.imooc.com//5b671fb700014ea305690324.jpg

查看完整回答
反對 回復 2018-08-06
  • 2 回答
  • 0 關注
  • 1400 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號