如果POST數據在請求的主體中發送,爲什麼使用URL編碼?爲什麼POST請求經常與Content-type集一起發送到urlencoded?
POST請求需要的contentType被設置來描述請求的主體中發送的數據和URL編碼常用。
GET請求不會因爲沒有主體。請求參數位於URL中。
下面是代碼中的外觀(工作正常)。
/******************************************************************************/
// AJAX
$P.ajax = function (config_ajax) {
var xhr;
// get
if (config_ajax.type === 'get') {
xhr = new win.XMLHttpRequest();
xhr.open('GET', config_ajax.url, true);
xhr.onload = function() {
if (this.status === 200) {
config_ajax.callback(xhr.responseText);
}
};
xhr.send(null);
}
// post
if (config_ajax.type === 'post') {
xhr = new win.XMLHttpRequest();
xhr.open("POST", config_ajax.url, true);
xhr.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
xhr.onload = function() {
if (this.status === 200) {
config_ajax.callback(xhr.responseText);
}
};
xhr.send(config_ajax.data);
}
在這裏,您可以看到發送數據GET爲空並填充爲POST發送數據,也將POST數據是URL編碼()和GET數據是沒有的。
URL編碼不是默認的,如果你不指定它或其他一些編碼,錯誤將被拋出。
我想,我要問,這就是爲什麼我不能離開其關閉(將contentType爲POST),並具有數據傳輸?
或者如果通過規範需要Content-type。有什麼我比URL編碼更好用嗎?
如上所述,因爲數據是不是在URL中,也不需要URL編碼,我寧願使用一些更簡單。
我的猜測是,這是不可能的,這只是一個默認的,已經在Ajax之前使用,也許當POST請求確實使用URL?
你錯過了我的問題的全部。編碼似乎更多是逃避。 'encodeURIComponent'可能更好,叫做'escapeURIComponent'。沒有必要轉義未放置在URI中的字符。所以據我所知,您不需要轉義POST請求正文中的任何字符。在理想的世界中,你不會強迫對不需要它的東西進行「編碼」。我不想發送編碼或轉義的數據。我可以使用什麼來發送純文本數據或純二進制數據?不過,我會將此標記爲將其從我未標記的列表中刪除。 –
URI格式不使用轉義字符,它使用百分號編碼,因此建議函數被稱爲「escapeURIComponent」是沒有意義的。 – Quentin
'application/x-www-form-urlencoded'格式表示一系列鍵/值對。如果不對特殊含義的字符進行編碼,則無法將這些字符作爲數據和這些字符作爲特殊含義區分。這將導致無法在數據中使用(例如)和&符號(因爲它將鍵/值對分開)。 – Quentin