今回はネイティブ Ajax の MIME タイプ (コード付き) を紹介します。ネイティブ Ajax が MIME タイプを実装するための 注意事項 は何ですか。実際のケースを見てみましょう。
問題の説明
次の例は、Ajaxpost リクエスト のコードです。このコードをテストして実行すると、返された ステータス コード は 400 であることがわかりました。サーバーは理解できませんでした。後で確認して修正した結果、以下のコードを少し修正するだけでよいことがわかりました
元のコード
var send = function (url, params, fn) { var me = this; var xhr = null; var data = ''; fn = fn || function() {}; params = params || {}; for(var item in params) { data += item + '=' + params[item] + '&'; } if(data[data.length - 1] == '&') { data = data.slice(0, data.length - 1); } if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }else if(window.ActiveXObject) { xhr= new ActiveXObject("Microsoft.XMLHTTP"); } xhr.open("post", url, true); xhr.setRequestHeader("Content-type", "application/json"); xhr.onreadystatechange = function () { if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) { fn(JSON.parse(xhr.responseText)); } }; xhr.send(JSON.stringify(params)); }
修正コード
var send = function (url, params, fn) { var me = this; var xhr = null; fn = fn || function() {}; params = params || {}; if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }else if(window.ActiveXObject) { xhr= new ActiveXObject("Microsoft.XMLHTTP"); } xhr.open("post", url, true); xhr.setRequestHeader("Content-type", "application/json"); xhr.onreadystatechange = function () { if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) { fn(JSON.parse(xhr.responseText)); } }; xhr.send(JSON.stringify(params)); }
変数の処理が削除され、sendで渡されるパラメータがparams変数
問題解決
問題は解決しましたが、疑問点は以前使っていたのですが、ネイティブAjaxではメソッドがpostする際に渡されるパラメータは「name=123&age=32」の形式になっているのに、なぜ今シリアル化されたJSONオブジェクトを渡しても大丈夫なのでしょうか? このとき、追加した MIME タイプに気づきました。Content-type を「application/json」に設定しました。このとき、一般的に使用されているものを思い出しました。 MIME タイプは "application/x-www-form-urlencoded" です。この場合、send メソッドで渡されるパラメーターは "name=123&age=32" でなければなりません。これで混乱は終わりました (~ ̄▽ ̄)。 ~
補足 ちなみに、ステータスコード405。前回見たのは、フロントエンドがリクエストを送信したときで、今回遭遇したときは、渡されたパラメータが間違っていました。これは、バックエンドがこのリクエストの処理をまだ追加していないためです
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
ID カードと銀行カード番号の形式を決定する正規表現の書き方 JS でゼロ以外の正の整数を検証する方法以上がネイティブ Ajax MIME タイプの実装 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。