✅fetch 和 XMLHTTPRequest 有什麼不同?
大家好!在從事一個有趣的專案時,我有一個想法來講述 fetch 和 XMLHTTPRequest 之間的差異。事實上,如果你知道它的創建歷史,這個問題聽起來很有趣,從某種意義上說,它有點不正確,但你仍然需要了解它,因為,比方說,對於我作為一個開發人員來說,當我處理每天都會遇到各種各樣的API,了解一下會很有用,以免創建不必要的程式碼。
什麼是 XMLHTTPRequest 及其建立簡史
在 javascript 中,XMLHttpRequest 物件用於與伺服器互動。您可以從 URL 檢索數據,而無需刷新整個頁面。這使得網頁能夠僅更新頁面的一部分,而不會中斷使用者正在做的事情。但總的來說,說穿了就是一個API。當我們聽到這個時,我們立即想起事件循環、非同步(程式碼執行將在一定時間後完成)等概念。例如,使用 XMLHTTPRequest 的程式碼如下所示:
const xhr = new XMLHttpRequest(); // method, URL, [isAsync, user, password] xhr.open("GET", "/api/getPage"); // body xhr.send()
XMLHTTPRequest 本身的創建歷史讓我們回到了恐龍行走的遙遠歲月……好吧,開個玩笑。事實上,這個 API 最初是由 Microsoft 開發的,並在 Microsoft Exchange Server 軟體 2000 產品的 Outlook on the Web 元件中引進。
當時,它的名稱有所不同 - IXMLHTTPRequest,並且在介面的第一個版本中(如果可以這麼說的話)與現在有點不同。也就是說,基數明顯保持不變,但25年來明顯進行了調整。後來,它被添加到 MSXML 2.0 中,甚至後來在 1999 年 3 月添加到 Internet Explorer 5 中。
然後,Mozilla 程式設計師基於 IXMLHTTPRequest 開發了自己的 API 版本,然後稱為 nsIXMLHttpRequest,並使其可以透過我們喜愛的 XMLHttpRequest 進行存取。所有這些都在 2000 年 12 月添加到 Gecko 0.6 版本中(Gecko 是 FireFox 和許多其他地方使用的瀏覽器引擎)。當時還沒有FireFox這樣的東西,因為它的第一個版本在2002年9月發布,被稱為Phoenix,然後是FireBird,直到2004年才被稱為FireFox。然後,在這一切之前,出現了 Netscape Navigator,但與 Internet Explorer 的對抗僅此而已 - 那是另一個故事,在本文中沒有必要寫。後來又增加了對Safari、Opera等瀏覽器的支援。因此,當人們告訴你這個物件是用來相容舊瀏覽器時,那麼他們當然是對的,因為這把我們帶到了 90 年代末,當時 Web 開發剛剛發展起來。你甚至可以記得網路泡沫的時間,但是,不可否認,那是早一點,或者是在那個時候(如果我們使用 Internet Explorer),但無論如何,那是那時。
So what's the difference?
So, returning to the question about the difference, the most important difference is already hidden in history, because XMLHTTPRequest is just an old, but supported API, and fetch is just a new API, which kind of replaces it. As of today, XMLHTTPRequest 2.0 was released in January 2012, but the latest edition of 1.0 standard was released in December of the same year. This is the current standard for this object. But now imagine the faces of the developers who wrote this all the time:
var xhr = new XMLHttpRequest(); xhr.open('GET', '/api/getData', true); xhr.onload = function () { if (xhr.status >= 200 && xhr.status < 300) { var data = JSON.parse(xhr.responseText); console.log(data); } else { console.error('Request failed with status:', xhr.status); } }; xhr.onerror = function () { console.error('There was a network error.'); }; xhr.send();
instead of this
fetch('/api/getData') .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(data => { console.log(data); }) .catch(error => { console.error('There was a problem with the fetch operation:', error); });
a few years ago. That's the only thing that comes to mind right away.
But seriously, here is a short list of differences:
Promise-oriented: The Fetch API uses promises, which makes it easier to work with asynchronous code and allows you to use convenient constructs like .then() and async and await.
Simplified interface: The Fetch API has a simpler and more intuitive syntax. For example, to make requests, you don’t need to create an object and set its properties, as is the case with XHR.
Support for new features: The Fetch API supports new features such as Request and Response objects, which provide convenient methods for working with requests, responses, and their transformations.
Support for streams: The Fetch API supports streaming data, which allows you to work with large amounts of data as it is received.
Canceling requests: Although the Fetch API does not have built-in support for canceling requests, you can use the abort controller to do so, which makes managing requests more flexible.
Improved customization: The Fetch API provides more options for configuring requests, such as setting headers, caching modes, and other parameters.
cors support: The Fetch API provides more flexibility in working with CORS (Cross-Origin Resource Sharing), which allows for more flexible configuration of requests to resources from other domains.
Better error handling: When working with the Fetch API, you can better handle response statuses, since a request error (e.g. network unavailable) will reject the promise, while a successful response with a 4xx or 5xx code will not reject it, and you will need to check the status code yourself.
This is of course not me, but it's just a cool picture
물론 더 많은 차이점이 있지만 지금 나열하는 것은 의미가 없습니다. 왜냐하면 모든 매개변수로 볼 때 이것은 단순히 최신 브라우저 요구 사항에 대한 이전 표준의 향상된 버전일 뿐이라는 것이 분명하기 때문입니다.
후문
처음에는 가져오기가 새로운 표준인 한 줄을 작성하려고 생각했지만 실제로는 말할 수 있는 멋진 내용이 많이 있는데 너무 단순하고 유익하지 않을 것입니다. 가져오기에 관한 전체 기사를 작성할 수 있지만 이 기사에는 특별한 요점이 없습니다. 하지만 제 생각에는 전반적으로 모든 것이 괜찮아 보입니다.
글을 읽어주셔서 진심으로 감사드립니다!
추신
그런데 이번 프로젝트는 HMPL이었습니다. 서버에서 클라이언트로 UI를 표시하기 위한 작은 템플릿 언어입니다. 이 프로젝트를 별점으로 평가해 주시면 좋을 것 같습니다. 감사합니다!
스타HMPL
以上是✅fetch 和 XMLHTTPRequest 有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。
