jquery ajaxパラメータが文字化けした場合の対処方法

PHPz
リリース: 2023-04-05 14:23:23
オリジナル
547 人が閲覧しました

インターネット技術の発展に伴い、Ajax 技術を使用して Web ページ上で動的な対話を実現する Web サイトがますます増えています。最も人気のある JavaScript ライブラリである jQuery は、多くの Web サイトで最初に選択されるものでもあります。ただし、jQuery の Ajax を使用して POST リクエストを送信すると、多くの開発者は中国語パラメータの文字化けという非常に厄介な問題に遭遇することになります。この記事では、この問題の原因と解決策について説明します。

問題の原因

POST リクエストを送信するとき、jQuery の Ajax メソッドはデフォルトでパラメータを「application/x-www-form-urlencoded」形式でシリアル化し、バックエンドに送信します。 。この形式は比較的シンプルで、ブラウザ間で最も互換性があります。ただし、パラメータに漢字が含まれる場合は文字化けが発生します。これは、この形式が中国語をサポートしておらず、中国語を正しく送信するには URL エンコードとエスケープが必要なためです。

この問題を解決するには、jQuery が提供する別のデータ形式「multipart/form-data」を使用することを検討できます。この形式は中国語をサポートしていますが、この形式を使用する場合、リクエスト ヘッダーには「Content-Type: multipart/form-data; border=----XXXXXX」が含まれるため、ブラウザが自動的にバックエンドによるパラメータ値の解析を妨げる可能性がある区切り文字。

解決策

上記の問題に対応するには、次の 3 つの解決策を使用できます。

方法 1: URL を手動でエンコードする

パラメータ送信時に URL を手動でエンコードする、URL を手動でエンコードし、バックエンドでデコードできます。パラメータは、JavaScript の encodeURIComponent() メソッドを使用してエンコードできます。例:

$.ajax({
  type:'POST',
  url:url,
  data: {'name':encodeURIComponent('张三'),'age':20},
  success:function(data){
    console.log(data);
  }
});
ログイン後にコピー

バックエンドでは、Java の URLDecoder.decode() メソッドを使用してデコードします:

String name = URLDecoder.decode(request.getParameter("name"), "UTF-8");
int age = Integer.parseInt(request.getParameter("age"));
ログイン後にコピー

このメソッドはより面倒で、フロントエンドとバックエンドの両方でエンコードおよびデコード操作が必要です。 。

方法 2: リクエスト ヘッダーを変更する

リクエスト ヘッダーを変更し、「Content-Type」を「application/json;charset=utf-8」に変更し、JSON 形式を使用して、データを送信します。例:

$.ajax({
  type:'POST',
  url:url,
  contentType: "application/json;charset=utf-8",
  data: JSON.stringify({'name':'张三','age':20}),
  success:function(data){
    console.log(data);
  }
});
ログイン後にコピー

バックエンドで、Java の JsonParser を使用して JSON を解析します:

JsonParser parser = new JsonParser();
JsonObject object = parser.parse(json).getAsJsonObject();
String name = object.get("name").getAsString();
int age = object.get("age").getAsInt();
ログイン後にコピー

このメソッドは比較的単純ですが、JSON 形式でデータを送信する場合にのみ適しています。

方法 3: バックエンド コードを変更する

バックエンドで PHP を使用している場合は、エンコードやデコードを行わずに、$_POST または $_REQUEST を直接使用してパラメーター値を取得できます。例:

$name = isset($_POST['name']) ? $_POST['name'] : '';
$age = isset($_POST['age']) ? intval($_POST['age']) : 0;
ログイン後にコピー

バックエンドが Java を使用している場合は、HttpServletRequest の getInputStream() メソッドを使用してパラメータ値を取得できます。例:

StringBuilder sb = new StringBuilder();
BufferedReader bufferedReader = null;
try {
  InputStream inputStream = request.getInputStream();
  bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  String line = null;
  while((line = bufferedReader.readLine()) != null) {
    sb.append(line);
  }
} catch (IOException e) {
  e.printStackTrace();
} finally {
  if(bufferedReader != null) {
    try {
      bufferedReader.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
ログイン後にコピー

次に、JsonParser を使用して JSON 形式のデータを解析することも、application/x-www-form-urlencoded 形式のデータを手動で解析することもできます。

つまり、それぞれの方法には独自の長所と短所があり、特定の状況に応じて最適な方法を選択できます。どちらの方法を使用する場合でも、文字化けを避けるために中国語パラメータのエンコードとデコードに注意する必要があります。

以上がjquery ajaxパラメータが文字化けした場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!