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ù)。