ホームページ > 記事 > ウェブフロントエンド > Ajax はパラメータが長すぎて正常に送信できない問題を迅速に解決します
今回は、パラメーターが長すぎて正常に送信できない問題をすばやく解決するための ajax に関する記事をお届けします。今からそれを皆さんと共有し、皆さんの参考にしてください。
いろいろ調べてみると、getメソッドのパラメータは制限されているのに対し、postメソッドのパラメータの長さは無制限だそうです。これもgetよりもpostの利点です。
Ajax の post メソッドを使用し、従来のパラメーター形式 (param1=a1¶m2=a2) を使用します。パラメーターの長さが長すぎると、送信はまだ失敗します。たとえば、私たちはよく次のような ajax 投稿リクエストを書きます:
$.ajax({ type: "post", // post or get contentType:"application/json;charset=utf-8", data: “requestTag=”+tag+"&content="+content, //请求参数 url: "postMockJson", //地址 dataType: "text", error: function (err) { outLog("错误"+err); }, success: onSaveSuccess });
このように使用すると、パラメータ 2: content の内容が多すぎることがわかります。たとえば、比較的大きなテキスト コンテンツを渡している場合、そして私はそれをバックグラウンドで提供しています(サーブレットから取得するとき):
String content= request.getParameter("content");
ここでの content の値は null です。
Ajax リクエストが成功したかどうかを確認する簡単な方法もあります。F12 開発者ツールを使用してデバッグすると、F12 ツールのネットワーク オプション ページで開始されたリクエストを確認できます。 、要求されたパラメータにエラー メッセージがあります。
解決策:
ajaxのパラメータ形式を記述する別の方法があります: json形式でパラメータをリクエストします。次のように記述できます:
var param = "{requestTag:""+requestTag+" ", content:""+content+""}";
(ps: 正しい json 形式に注意してください)
このとき、F12 を使用してデバッグすると、要求されたパラメーターのデータが正しい。
それでは、サーブレットで取得したコンテンツが依然として null であるのはなぜでしょうか。 ? ?
リクエストパラメータはjsonデータブロックであるため、当然のことながら、 request.getParameter("content") メソッドはjsonデータを解析しないため、データを取得できません。
では、渡すパラメータデータはどこにあるのでしょうか?
ここで重要な点があります。データはすべてリクエスト オブジェクト内にあります。
次に、次のように、最も原始的な方法を使用して、データ フロー メソッドを通じて渡されたデータを取得します:
request.setCharacterEncoding("UTF-8"); StringBuilder sb = new StringBuilder(); try(BufferedReader reader = request.getReader();) { char[] buff = new char[1024]; int len; while((len = reader.read(buff)) != -1) { sb.append(buff,0, len); } }catch (IOException e) { e.printStackTrace(); }
この時点で、JSON データはすべて sb オブジェクト内にあり、必要なのはそれを解析するには ただの json オブジェクト:
JSONObject jobject = JSONObject.fromObject(sb.toString()); String requestTag = jobject.getString("requestTag"); String content = jobject.getString("content");
この時点で、コンテンツを取得できます。
上記は私があなたのためにまとめたものです。
関連記事:
以上がAjax はパラメータが長すぎて正常に送信できない問題を迅速に解決しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。