国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【譯】通過(guò)JavaScript發(fā)送表單

chinafgj / 1229人閱讀

摘要:能異步地發(fā)送任意數(shù)據(jù)的技術(shù)稱為,表示異步的和。若你使用,使用發(fā)送表單還會(huì)影響同源策略,并導(dǎo)致內(nèi)容被發(fā)送到一個(gè)無(wú)法訪問(wèn)的中。但要手動(dòng)發(fā)送二進(jìn)制數(shù)據(jù)的話,還有很多額外工作要做。用來(lái)發(fā)送二進(jìn)制是很直接的,使用方法就好了。

系列文章說(shuō)明

原文

在[發(fā)送表單數(shù)據(jù)]()一文中,HTML表單可以聲明式地發(fā)送一個(gè)HTTP請(qǐng)求。但表單也可以用JavaScript來(lái)準(zhǔn)備一個(gè)HTTP請(qǐng)求。本文將探索如何做到這點(diǎn)。

表單,不只是表單

隨著開放式Web應(yīng)用的出現(xiàn),現(xiàn)在提供HTML表單、而不是文字表單供用戶填寫的做法,已經(jīng)越發(fā)普遍了。而越來(lái)越多的開發(fā)者也獲得了數(shù)據(jù)傳輸?shù)目刂茩?quán)。

獲得對(duì)數(shù)據(jù)傳輸?shù)目刂茩?quán)

標(biāo)準(zhǔn)的HTML表單提交操作會(huì)加載數(shù)據(jù)發(fā)送到的URL,這就意味著瀏覽器的窗口中會(huì)進(jìn)行整個(gè)頁(yè)面的重新加載。而如果避免了頁(yè)面的重新加載,就會(huì)避免頁(yè)面的閃爍和網(wǎng)絡(luò)延遲,進(jìn)而提供更順暢的用戶體驗(yàn)。

在許多現(xiàn)代的UI設(shè)計(jì)中,HTML表單只是用來(lái)收集用戶的輸入。當(dāng)用戶要發(fā)送數(shù)據(jù)時(shí),Web應(yīng)用會(huì)進(jìn)行控制,并在后臺(tái)異步地發(fā)送數(shù)據(jù),只更新UI中需要更改的部分。

能異步地發(fā)送任意數(shù)據(jù)的技術(shù)稱為AJAX,表示“異步的JavaScript和XML”。

和傳統(tǒng)表單處理的不同

AJAX使用了XMLHttpRequest(XHR)DOM對(duì)象,它可以建立HTTP請(qǐng)求、發(fā)送請(qǐng)求并處理結(jié)果。

注意: 老的AJAX技術(shù)可能不是用XMLHttpRequest。比如JSONP和eval()函數(shù)結(jié)合起來(lái)使用。雖然該方法可行,但不推薦使用它,因?yàn)槠浯嬖趪?yán)重的安全問(wèn)題。所以除非為了兼容那些特別老舊、不支持XMLHttpRequest或JSON的瀏覽器,還是避免使用該技術(shù)

由于歷史原因,XMLHttpRequest本是設(shè)計(jì)用來(lái)獲取和發(fā)送交換格式為XML的數(shù)據(jù)的。但現(xiàn)在JSON取代了XML,有著更普遍的使用。

不過(guò)XML和JSON都不符合作為表單數(shù)據(jù)請(qǐng)求的編碼。表單數(shù)據(jù)(application/x-www-form-urlencoded)是用于構(gòu)造鍵值對(duì)的URL編碼列表的,若是要傳輸二進(jìn)制數(shù)據(jù),HTTP請(qǐng)求會(huì)被重塑為 multipart/form-data

若你能掌控前端(運(yùn)行在瀏覽器上的代碼)和后端(運(yùn)行在服務(wù)器上的代碼),你就能發(fā)送JSON或XML、并隨心所欲地處理它們。

但如果你使用的是第三方服務(wù),這就沒(méi)那么容易了,因?yàn)槟承┓?wù)只接受表單數(shù)據(jù)。當(dāng)然也有使用表單數(shù)據(jù)處理起來(lái)更方便的情況,比如數(shù)據(jù)是鍵值對(duì)或二進(jìn)制數(shù)據(jù)時(shí),用現(xiàn)成的后端工具就能處理它們、不需要額外的代碼。

那么,具體該如何發(fā)送數(shù)據(jù)呢?

發(fā)送表單數(shù)據(jù)

目前有三種方式來(lái)發(fā)送表單數(shù)據(jù),既有老舊的技術(shù)、也有新特性FormData對(duì)象,接下來(lái)就來(lái)深入了解下它們。

在隱藏的iframe中構(gòu)建DOM

發(fā)送表單數(shù)據(jù)最古老的方法,是用DOM API建立一個(gè)表單,然后發(fā)送數(shù)據(jù)到一個(gè)隱藏的