2 回答

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
要底層實(shí)現(xiàn)?給你底層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;
};

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
A:你在看Ajax底層實(shí)現(xiàn),沒必要吧?
B:有必要,招人面試時(shí)裝B用。
PS:恭喜你從coding farmer升級為coding chef
其實(shí)對于Ajax理解幾個(gè)關(guān)鍵詞就夠了,異步/回調(diào)/線程,至于怎么做的,真的沒必要太深入。
你這么理解:
Ajax是告訴瀏覽器給我要發(fā)送一個(gè)HTTP請求,你給我新開個(gè)線程去執(zhí)行下,完事后告訴我一聲,我在其他function中執(zhí)行后續(xù)操作(回調(diào))。在線程返回結(jié)果前,我可以繼續(xù)做其他事情。(異步)
Ajax的工作原理,如圖:
添加回答
舉報(bào)