微信小程序自學(xué) 隨筆3 Failed to load resource: the server responded with a status of 400 (Bad Request)

  • ajax
    AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開發(fā)技術(shù)。
    通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。
    傳統(tǒng)的網(wǎng)頁(yè)(不使用 AJAX)如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁(yè)頁(yè)面。

  • HTTP Header
    HTTP(HyperTextTransferProtocol) 即超文本傳輸協(xié)議,目前網(wǎng)頁(yè)傳輸?shù)牡耐ㄓ脜f(xié)議。HTTP協(xié)議采用了請(qǐng)求/響應(yīng)模 型,瀏覽器或其他客戶端發(fā)出請(qǐng)求,服務(wù)器給與響應(yīng)。就整個(gè)網(wǎng)絡(luò)資源傳輸而言,包括message-header和message-body兩部分。首先傳 遞message-header,即http header消息 。http header 消息通常被分為4個(gè)部分:general header, request header, response header, entity header。但是這種分法就理解而言,感覺(jué)界限不太明確。根據(jù)維基百科對(duì)http header內(nèi)容的組織形式,大體分為Request和Response兩部分。

  • 微信小程序設(shè)置了合法請(qǐng)求域名,小程序一直提示不在合法域名列別中
    解決辦法:https://my.oschina.net/u/3066247/blog/796057


關(guān)于wx.request產(chǎn)生 “Failed to load resource: the server responded with a status of 400 (Bad Request)” 的解決辦法

    //xxxx.js
    var request_URL='https://xxx';
    Page({
        data:{},
        onLoad:function(){
          wx.request({
            url:request_URL,
            data:{},
            header:{
              'content-type': 'application/json'
            },
            success: function(res) {
              console.log(res.data)
            }
          })
        }
    })

解決辦法:將ContentType改為 "application/x-www-form-urlencoded" ;

  • application/x-www-form-urlencoded: 窗體數(shù)據(jù)被編碼為名稱/值對(duì),這是標(biāo)準(zhǔn)的編碼格式;
    當(dāng)action為get時(shí)候,瀏覽器用x-www-form-urlencoded的編碼方式把form數(shù)據(jù)轉(zhuǎn)換成一個(gè)字串(name1=value1&name2=value2...),然后把這個(gè)字串a(chǎn)ppend到url后面,用?分割,加載這個(gè)新的url。

  • multipart/form-data: 窗體數(shù)據(jù)被編碼為一條消息,頁(yè)上的每個(gè)控件對(duì)應(yīng)消息中的一個(gè)部分;
    當(dāng)action為post時(shí)候,瀏覽器把form數(shù)據(jù)封裝到http body中,然后發(fā)送到server。 如果沒(méi)有type=file的控件,用默認(rèn)的application/x-www-form-urlencoded就可以了。 但是如果有type=file的話,就要用到multipart/form-data了。瀏覽器會(huì)把整個(gè)表單以控件為單位分割,并為每個(gè)部分加上Content-Disposition(form-data或者file),Content-Type(默認(rèn)為text/plain),name(控件name)等信息,并加上分割符(boundary);

  • text/plain: 窗體數(shù)據(jù)以純文本形式進(jìn)行編碼,其中不含任何控件或格式字符;

http://blog.csdn.net/mhmyqn/article/details/25561535
最近在看書時(shí)才真正搞明白,服務(wù)器為什么會(huì)對(duì)表單提交和文件上傳做特殊處理,因?yàn)楸韱翁峤粩?shù)據(jù)是名值對(duì)的方式,且Content-Type為application/x-www-form-urlencoded,而文件上傳服務(wù)器需要特殊處理,普通的post請(qǐng)求(Content-Type不是application/x-www-form-urlencoded)數(shù)據(jù)格式不固定,不一定是名值對(duì)的方式,所以服務(wù)器無(wú)法知道具體的處理方式,所以只能通過(guò)獲取原始數(shù)據(jù)流的方式來(lái)進(jìn)行解析。

jquery在執(zhí)行post請(qǐng)求時(shí),會(huì)設(shè)置Content-Type為application/x-www-form-urlencoded,所以服務(wù)器能夠正確解析,而使用原生ajax請(qǐng)求時(shí),如果不顯示的設(shè)置Content-Type,那么默認(rèn)是text/plain,這時(shí)服務(wù)器就不知道怎么解析數(shù)據(jù)了,所以才只能通過(guò)獲取原始數(shù)據(jù)流的方式來(lái)進(jìn)行解析請(qǐng)求數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評(píng)論 19 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,738評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,344評(píng)論 3 82
  • 作為一個(gè)剛畢業(yè)的iOS開發(fā)者,接觸蘋果官方文檔真的是晦澀難懂,只是咱也是一個(gè)英語(yǔ)六級(jí)的孩子,被蘋果文檔弄得很心累,...
    只為此心無(wú)垠閱讀 14,125評(píng)論 2 36
  • 弘丹參考的是傅佩榮老師的《人能弘道-傅佩榮談?wù)撜Z(yǔ)》,綠窗幽夢(mèng)參考的是朱熹的《四書章句集注》,由弘丹整理。 小編會(huì)每...
    弘丹閱讀 1,801評(píng)論 0 9

友情鏈接更多精彩內(nèi)容