å¯¹äºæ¤ç¤ºä¾ï¼æä»¬å°ä»å 个ä¸åçææ¬æä»¶ä¸è¯·æ±æ°æ®ï¼å¹¶ä½¿ç¨å®ä»¬æ¥å¡«å å 容åºåã
è¿ä¸ç³»åæä»¶å°åå®ä¸ºæä»¬çæ°æ®åºï¼å¨å®é çåºç¨ç¨åºä¸ï¼æä»¬æ´æå¯è½ä½¿ç¨æå¡ç«¯è¯è¨ï¼å¦ PHPãPython æ Nodeï¼ä»æ°æ®åºä¸è·åæ°æ®ãä½å¨è¿éï¼æä»¬å¸æä¿æç®å并䏿³¨äºå®¢æ·ç«¯é¨åã
è¦å¼å§æ¤ç¤ºä¾ï¼è¯·å¨è®¡ç®æºçæ°çç®å½ä¸å建 fetch-start.html ååä¸ªææ¬æä»¶ï¼verse1.txtãverse2.txtãverse3.txt å verse4.txtï¼çæ¬å°æ·è´ãå¨è¿ä¸ªç¤ºä¾ä¸ï¼å½ä½ å¨ä¸æèåä¸éæ©ä¸ä¸ªé项æ¶ï¼æä»¬ä¼è·åä¸åçè¯æï¼ä½ å¯è½ä¼è®¤è¯ï¼ã
å¨ <script>
å
ç´ ä¸ï¼æ·»å 以ä¸ä»£ç ãè¿ä¼åå¨å¯¹ <select>
å <pre>
å
ç´ çå¼ç¨ï¼å¹¶å¯¹ <select>
å
ç´ æ·»å ä¸ä¸ªäºä»¶çå¬å¨ï¼ä»¥ä¾¿å¨ç¨æ·éæ©ä¸ä¸ªæ°ç弿¶ï¼æ°å¼å°ä½ä¸ºåæ°ä¼ éç»å为 updateDisplay()
ç彿°ã
const verseChoose = document.querySelector("select");
const poemDisplay = document.querySelector("pre");
verseChoose.addEventListener("change", () => {
const verse = verseChoose.value;
updateDisplay(verse);
});
ä¸é¢è®©æä»¬å®ä¹ updateDisplay()
彿°ãé¦å
ï¼å°ä»¥ä¸å
容æ¾å¨ä½ ä¹åç代ç å䏿¹ââè¿æ¯è¯¥å½æ°ç空壳ã
function updateDisplay(verse) {
}
让æä»¬å°éè¿æé ä¸ä¸ªæåæä»¬è¦å è½½çææ¬æä»¶çç¸å¯¹ URL æ¥å¼å§ç¼å彿°ï¼å 为æä»¬ç¨åéè¦å®ã任使¶å <select>
å
ç´ çå¼é½ä¸æéç <option>
å
çææ¬ç¸åï¼é¤éå¨å¼å±æ§ä¸æå®äºä¸åçå¼ï¼ââä¾å¦âVerse 1âãç¸åºçè¯æææ¬æä»¶æ¯âverse1.txtâï¼å¹¶ä¸ HTML æä»¶ä½äºåä¸ç®å½ä¸ï¼å æ¤åªéè¦æä»¶åå³å¯ã
使¯ï¼web æå¡å¨å¾å¾æ¯åºå大å°åçï¼ä¸æä»¶å没æç©ºæ ¼ãè¦å°âVerse 1â转æ¢ä¸ºâverse1.txtâï¼æä»¬éè¦å° V
转æ¢ä¸ºå°åãå é¤ç©ºæ ¼ï¼å¹¶å¨æ«å°¾æ·»å â.txtâãè¿å¯ä»¥éè¿ replace()
ãtoLowerCase()
忍¡æ¿å符串æ¥å®æãå¨ updateDisplay()
彿°ä¸æ·»å 以ä¸ä»£ç ï¼
verse = verse.replace(" ", "").toLowerCase();
const url = `${verse}.txt`;
æåï¼æä»¬å¯ä»¥å¼å§ä½¿ç¨ Fetch API äºï¼
// è°ç¨ `fetch()`ï¼ä¼ å
¥ URLã
fetch(url)
// fetch() è¿åä¸ä¸ª promiseã彿们仿å¡å¨æ¶å°ååºæ¶ï¼
// ä¼ä½¿ç¨è¯¥ååºè°ç¨ promise ç `then()` å¤çå¨ã
.then((response) => {
// å¦æè¯·æ±æ²¡ææåï¼æä»¬çå¤çå¨ä¼æåºé误ã
if (!response.ok) {
throw new Error(`HTTP é误ï¼${response.status}`);
}
// å¦åï¼å¦æè¯·æ±æåï¼ï¼æä»¬çå¤çå¨éè¿è°ç¨
// response.text() 以è·åææ¬å½¢å¼çååºï¼
// å¹¶ç«å³è¿å `response.text()` è¿åç promiseã
return response.text();
})
// è¥æåè°ç¨ response.text()ï¼ä¼ä½¿ç¨è¿åçææ¬æ¥è°ç¨ `then()` å¤çå¨ï¼
// ç¶åæä»¬å°å
¶æ·è´å° `poemDisplay` æ¡ä¸ã
.then((text) => (poemDisplay.textContent = text))
// æè·å¯è½åºç°çä»»ä½é误ï¼
// å¹¶å¨ `poemDisplay` æ¡ä¸æ¾ç¤ºä¸æ¡æ¶æ¯ã
.catch((error) => (poemDisplay.textContent = `è·åè¯æå¤±è´¥ï¼${error}`));
è¿éæå¾å¤å 容éè¦å±å¼ã
é¦å
ï¼Fetch API çå
¥å£ç¹æ¯ä¸ä¸ªå为 fetch()
çå
¨å±å½æ°ï¼å®ä»¥ URL ä¸ºåæ°ï¼å
¶ä½¿ç¨å¦ä¸ä¸ªå¯éåæ°æ¥è¿è¡èªå®ä¹è®¾ç½®ï¼ä½æä»¬å¨è¿éä¸ä½¿ç¨å®ï¼ã
æ¥ä¸æ¥ï¼fetch()
æ¯ä¸ä¸ªå¼æ¥ APIï¼ä¼è¿åä¸ä¸ª Promise
ãå¦æä½ ä¸ç¥éä»ä¹æ¯ Promiseï¼è¯·åé
弿¥ JavaScript ç« èï¼ç¶åååå°è¿éãä½ ä¼åç°é£ç¯æç« ä¹ä»ç»äº fetch()
APIï¼
å 为 fetch()
è¿åä¸ä¸ª Promiseï¼æä»¥æä»¬å°ä¸ä¸ªå½æ°ä¼ éç»å®è¿åç Promise ç then()
æ¹æ³ãæ¤æ¹æ³ä¼å¨ HTTP è¯·æ±æ¶å°æå¡å¨çååºæ¶è¢«è°ç¨ãå¨å®çå¤çå¨ä¸ï¼æä»¬æ£æ¥è¯·æ±æ¯å¦æåï¼å¹¶å¨è¯·æ±å¤±è´¥æ¶æåºä¸ä¸ªé误ãå¦åï¼æä»¬è°ç¨ response.text()
以è·åææ¬å½¢å¼çååºæ£æã
response.text()
乿¯å¼æ¥çï¼æä»¥æä»¬è¿åå®è¿åç Promiseï¼å¹¶åæ°ç Promise ç then()
æ¹æ³ä¼ éä¸ä¸ªå½æ°ãè¿ä¸ªå½æ°ä¼å¨ååºææ¬å¯ç¨æ¶è¢«è°ç¨ï¼å¨è¿ä¸ªå½æ°ä¸ï¼æä»¬ä¼ä½¿ç¨è¯¥ææ¬æ´æ° <pre>
åã
æåï¼æä»¬å¨æåé¾å¼è°ç¨ catch()
å¤çå¨ï¼ä»¥æè·æä»¬è°ç¨ç弿¥å½æ°æå
¶ä»å¤çå¨ä¸æåºçä»»ä½é误ã
æ¤ç¤ºä¾çä¸ä¸ªé®é¢æ¯ï¼å®å¨ç¬¬ä¸æ¬¡å è½½æ¶ä¸ä¼æ¾ç¤ºä»»ä½è¯æãè¦è§£å³æ¤é®é¢ï¼è¯·å¨ä»£ç çæåï¼</script>
ç»ææ ç¾ä¹åï¼æ·»å 以ä¸ä¸¤è¡ä»£ç ï¼ä»¥é»è®¤å 载第ä¸é¦è¯æï¼å¹¶ç¡®ä¿ <select>
å
ç´ å§ç»æ¾ç¤ºæ£ç¡®çå¼ï¼
updateDisplay("Verse 1");
verseChoose.value = "Verse 1";
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4