成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

編碼請(qǐng)求主體

monw3c / 2868人閱讀

摘要:編碼請(qǐng)求主體的請(qǐng)求包括一個(gè)請(qǐng)求主體,將會(huì)包含客戶端傳遞給服務(wù)器的數(shù)據(jù),表單編碼的請(qǐng)求表單,當(dāng)用戶提交表單時(shí),表單中的數(shù)據(jù)將會(huì)編碼到字符串中,一并伴隨著請(qǐng)求發(fā)送。默認(rèn)情況下表單通過方法發(fā)送給服務(wù)器,而編碼后的表單數(shù)據(jù)為請(qǐng)求主體。

編碼請(qǐng)求主體
HTTP的POST請(qǐng)求包括一個(gè)請(qǐng)求主體,將會(huì)包含客戶端傳遞給服務(wù)器的數(shù)據(jù),

表單編碼的請(qǐng)求

HTML表單,當(dāng)用戶提交表單時(shí),表單中的數(shù)據(jù)將會(huì)編碼到字符串中,一并伴隨著請(qǐng)求發(fā)送。
默認(rèn)情況下HTML表單通過POST方法發(fā)送給服務(wù)器,而編碼后的表單數(shù)據(jù)為請(qǐng)求主體。

規(guī)則:使用URL編碼,使用等號(hào)把編碼后的名字和值分開,并使用&符號(hào)將名/值對(duì)分開。

如下所示: find=pizza&zipcode=02134&redius=1km

表單數(shù)據(jù)編碼格式會(huì)有一個(gè)正式的MIME類型

application/x-www-form-urlencoded
MIME 多用途internet郵件擴(kuò)展類型,對(duì)大小寫不敏感,傳統(tǒng)寫法小寫
一個(gè)栗子

用于HTTP請(qǐng)求的編碼對(duì)象

/*
 *    編碼對(duì)象的屬性
 *    如果它們是來自HTML表單的名/值對(duì),使用application/x-www-form-urlencolded
 *    將鍵值對(duì)轉(zhuǎn)換為HTTP的編碼方式的一個(gè)工具函數(shù)
 */

function encodeFormData(data) {
    if (!data) return "";    // 如果傳入為空,直接返回字符串
    var pairs = [];    // 保存名/值對(duì)
    for(var name in data) {    // 進(jìn)行遍歷
        if (!data.hasOwnProperty(name))    continue;    // 跳過繼承屬性,指示自身的屬性是否具有該值
        if (typeof data[name] === "function") continue;    // 跳過方法
        var value = data[name].toString();    // 將值轉(zhuǎn)換成字符串
        name = encodeURIComponent(name.replace("%20", "+"));    
        value = encodeURIComponent(value.replace("%20", "+"));
        pairs.push(name + "=" + value);    // 記住名值對(duì)
    }

    return pairs.join("&");    // 進(jìn)行連接
}

上方代碼將傳入的鍵值對(duì),轉(zhuǎn)換為url的方式提交

function postData(url, data, callback) {
    var request = new XMLHttpRequest();    // 新建一個(gè)類
    request.open("post", url);
    request.onreadystatechange = () => {
        if (request.readyState === 4 && callback) {
            callback(request);    // 調(diào)用回調(diào)函數(shù)
        };
        request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        
    }
    request.send(encodeFormData(data));
}

上方的代碼將會(huì)發(fā)送一個(gè)post請(qǐng)求,將鍵值對(duì)轉(zhuǎn)換為標(biāo)準(zhǔn)的url進(jìn)行提交

var e = {e:2222220};
postData("./", e);

查看一下post請(qǐng)求結(jié)果

同樣的get請(qǐng)求

function getData(url, data, callback) {
    var request = new XMLHttpRequest();
    request.open("GET", url + "?" + encodeFormData(data));
    request.onreadystatechange = () => {
        if (request.readyState === 4 && callback) {
            callback(request);
        }
    }
    request.send(null);
}

效果如下

JSON編碼

需要在將其更改為

application/json

即可以進(jìn)行表單提交

function postJSON(url, data, callback) {
    var request = new XMLHttpRequest();
    request.open("post", url);
    request.onreadystatechange = () => {
        if (request.readystate === 4 && callback) {
            callback(request);
        };
    }
    request.setRequestHeader("Content-Type", "application/json");
    request.send(JSON.stringify(data))
}

演示如下

psotJSON("./", e);

XML編碼請(qǐng)求

xml文檔作為主體的HTTP POST請(qǐng)求

function postQuery(url, what, where, radius, callback) {
    var request = new XMLHttpRequest();    
    request.open("post", url);    // 對(duì)指定的url發(fā)送POST請(qǐng)求
    request.onreadystatechange = () => {
        if (request.readyState === 4 && callback) callback(request);
    }

    // 下面開始使用XML
    var doc = document.implementation.createDocument("", "query", null);    // document.implementaton 返回一個(gè)DOMImplementation對(duì)象,該對(duì)象和當(dāng)前文檔的節(jié)點(diǎn)沒有任何關(guān)系(類似于一個(gè)虛擬節(jié)點(diǎn))其根節(jié)點(diǎn)為qqery 并且沒有聲明
    var query = doc.documentElement;    // 返回文檔的根元素
    var find = doc.createElement("find");    // 創(chuàng)建一個(gè)find元素
    query.appendChild(find);    // 讓find成為query的子節(jié)點(diǎn)
    find.setAttribute("zipcode", where);    // 創(chuàng)建一個(gè)屬性
    find.setAttribute("radius", radius);    
    find.appendChild(doc.createTextNode(what));    // what作為文本節(jié)點(diǎn),并且設(shè)置為find的子節(jié)點(diǎn)

    // 現(xiàn)在向服務(wù)器發(fā)送XML編碼的數(shù)據(jù)
    // 將會(huì)自動(dòng)設(shè)置Content-Type頭
    request.send(doc);
};

查看結(jié)果

postQuery("./", "hello", "world", "world");

打開網(wǎng)絡(luò)面板查看

multipart/from-data 請(qǐng)求

當(dāng)HTML表單包含文件上傳元素的時(shí)候,表單需要使用二進(jìn)制上傳,即

multipart/form-data

使用post方法發(fā)送multipart/form-data請(qǐng)求主體

XHR 為一種簡(jiǎn)稱,全稱為XMLHttpRequest

將會(huì)以一個(gè)字節(jié)一個(gè)字節(jié)發(fā)送

function postFormData(url, data, callback) {
    if (typeof FormData === "undefined") {     // 兼容,判斷該api是否存在
        throw new Error("not FormData");
    }

    var request = new XMLHttpRequest();
    request.open("post", url);
    request.onreadystechange = () => {    // 當(dāng)響應(yīng)完成的時(shí)候,回調(diào)函數(shù)
        if (request.readyState === 4 && callback)
            callback(request);    // 如果存在,則調(diào)用回調(diào)函數(shù)
    };
    var formdata = new FormData();    // 創(chuàng)建文件上傳的類
    for(var name in data) {
        if (!data.hasOwnProperty(name)) continue;    // 跳過繼承的屬性
        var value = data[name];    // 取值
        if (typeof value === "function") continue;    // 跳過方法
        // 將其鍵值對(duì)插入節(jié)點(diǎn)中
        formdata.append(name, value);    // 添加鍵值對(duì)作為子節(jié)點(diǎn)
    }
    // 由于使用FormData將會(huì)自動(dòng)設(shè)置頭部信息
    // 將鍵值對(duì)作為主體進(jìn)行發(fā)送
    request.send(formdata);
}
postFormData("./", "11111111111111");

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108217.html

相關(guān)文章

  • 前端必知必會(huì)HTTP請(qǐng)求系列(三)HTTP報(bào)文內(nèi)的http信息

    摘要:報(bào)文用于協(xié)議交互的信息被稱為報(bào)文。現(xiàn)在出現(xiàn)的各種首部字段及狀態(tài)碼稍后會(huì)闡述。狀態(tài)碼響應(yīng)報(bào)文包含了多個(gè)范圍的內(nèi)容使用。如果服務(wù)器無法響應(yīng)范圍請(qǐng)求,則會(huì)返回狀態(tài)碼和完整的實(shí)體內(nèi)容。 showImg(https://segmentfault.com/img/bVbthNL?w=900&h=500); http報(bào)文 用于HTTP協(xié)議交互的信息被稱為HTTP報(bào)文。請(qǐng)求端的http報(bào)文叫做請(qǐng)求報(bào)文...

    Invoker 評(píng)論0 收藏0
  • TCP/IP基礎(chǔ)總結(jié)性學(xué)習(xí)(3)

    摘要:狀態(tài)行包含表明響應(yīng)結(jié)果的狀態(tài)碼,原因短語(yǔ)和版本。這種把實(shí)體主體分塊的功能稱為分塊傳輸編碼。如果服務(wù)器端無法響應(yīng)范圍請(qǐng)求,則會(huì)返回狀態(tài)碼和完整的實(shí)體內(nèi)容。 HTTP 報(bào)文內(nèi)的 HTTP 信息 HTTP 通信過程包括從客戶端發(fā)往服務(wù)器端的請(qǐng)求及從服務(wù)器端返回 客戶端的響應(yīng)。 一. HTTP報(bào)文 用于 HTTP 協(xié)議交互的信息被稱為 HTTP 報(bào)文。請(qǐng)求端(客戶端)的 HTTP 報(bào)文叫做...

    xushaojieaaa 評(píng)論0 收藏0
  • TCP/IP基礎(chǔ)總結(jié)性學(xué)習(xí)(3)

    摘要:狀態(tài)行包含表明響應(yīng)結(jié)果的狀態(tài)碼,原因短語(yǔ)和版本。這種把實(shí)體主體分塊的功能稱為分塊傳輸編碼。如果服務(wù)器端無法響應(yīng)范圍請(qǐng)求,則會(huì)返回狀態(tài)碼和完整的實(shí)體內(nèi)容。 HTTP 報(bào)文內(nèi)的 HTTP 信息 HTTP 通信過程包括從客戶端發(fā)往服務(wù)器端的請(qǐng)求及從服務(wù)器端返回 客戶端的響應(yīng)。 一. HTTP報(bào)文 用于 HTTP 協(xié)議交互的信息被稱為 HTTP 報(bào)文。請(qǐng)求端(客戶端)的 HTTP 報(bào)文叫做...

    UnixAgain 評(píng)論0 收藏0
  • HTTP讀書筆記——HTTP報(bào)文內(nèi)的HTTP信息

    摘要:報(bào)文用于協(xié)議交互的信息被稱為報(bào)文。報(bào)文本身是由多行數(shù)據(jù)構(gòu)成的字符串文本。首部字段包含表明請(qǐng)求和響應(yīng)的各種條件和屬性的各類首部。報(bào)文的主體用于傳輸請(qǐng)求或響應(yīng)的實(shí)體主體。協(xié)議中有一種被稱為內(nèi)容編碼的功能也能進(jìn)行類似的操作。 HTTP報(bào)文 用于HTTP協(xié)議交互的信息被稱為報(bào)文。 請(qǐng)求端(客戶端)的HTTP報(bào)文叫做請(qǐng)求報(bào)文,響應(yīng)端(服務(wù)器端)的叫做響應(yīng)報(bào)文。 HTTP報(bào)文本身是由多行數(shù)據(jù)構(gòu)成...

    Sleepy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<