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 の送信データが null であり、POST の送信データが入力されていること、および POST データが URL エンコードされていること () と GET データがそうでないことを確認できます。
URL エンコーディングはデフォルトではありません。指定しない場合、または他のエンコーディングを指定すると、エラーがスローされます。
私が求めているのは、なぜそれをオフにして ( POST の contentType )、データを転送できないのでしょうか?
または、仕様によって Content-type が必要な場合。URL エンコーディング以外に使用できるものはありますか。
前述のように、データは URL に含まれておらず、URL エンコードを必要としないため、より単純なものを使用することをお勧めします。
私の推測では、これは不可能であり、これは単なるデフォルトであり、Ajax の前に使用されていたものであり、おそらく POST リクエストが URL を使用したときに使用されたのでしょうか?