如果 POST 数据在请求正文中发送,为什么要使用 URL 编码?
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 编码不是默认的,如果你不指定它或其他一些编码,就会抛出错误。
我想,我要问的是,为什么我不能将其关闭( POST 的 contentType )并进行数据传输?
或者,如果规范要求 Content-type 。有没有比 URL 编码更好的方法。
如上所述,因为数据不在 URL 中,也不需要 URL 编码,所以我宁愿使用更简单的东西。
我的猜测是这是不可能的,这只是一个默认值,在 Ajax 之前已经使用过,也许当 POST 请求确实使用了 URL 时?