Heim > Web-Frontend > Front-End-Fragen und Antworten > Was tun, wenn JQuery-Ajax-Parameter verstümmelte Zeichen übergeben?

Was tun, wenn JQuery-Ajax-Parameter verstümmelte Zeichen übergeben?

PHPz
Freigeben: 2023-04-05 14:23:23
Original
725 Leute haben es durchsucht

Mit der Entwicklung der Internet-Technologie nutzen immer mehr Websites die Ajax-Technologie, um eine dynamische Interaktion auf Webseiten zu erreichen. jQuery, die beliebteste JavaScript-Bibliothek, ist auch für viele Websites die erste Wahl. Bei der Verwendung von jQuerys Ajax zum Senden von POST-Anfragen stoßen viele Entwickler jedoch auf ein sehr peinliches Problem – verstümmelte chinesische Parameter. In diesem Artikel werden die Ursachen und Lösungen für dieses Problem erläutert.

Ursache des Problems

Beim Senden einer POST-Anfrage serialisiert die Ajax-Methode von jQuery die Parameter standardmäßig im Format „application/x-www-form-urlencoded“ und sendet sie an das Backend. Dieses Format ist relativ einfach und weist die beste Kompatibilität zwischen Browsern auf. Wenn die Parameter jedoch chinesische Zeichen enthalten, führt dies zu verstümmelten Zeichen. Dies liegt daran, dass dieses Format Chinesisch nicht unterstützt und Chinesisch für eine korrekte Übertragung URL-Kodierung und Escape erfordert.

Um dieses Problem zu lösen, können wir die Verwendung eines anderen von jQuery bereitgestellten Datenformats in Betracht ziehen – „multipart/form-data“. Dieses Format unterstützt Chinesisch, es ist jedoch zu beachten, dass bei Verwendung dieses Formats der Anforderungsheader „Content-Type: multipart/form-data; border=----XXXXXX“ enthält, was dazu führt, dass der Browser automatisch hinzufügt Trennzeichen, das die Analyse des Parameterwerts durch das Backend beeinträchtigen könnte.

Lösung

Um die oben genannten Probleme anzugehen, können wir die folgenden drei Lösungen verwenden:

Methode 1: URL-Kodierung manuell durchführen

Bei der Parameterübertragung können wir die URL-Kodierung manuell durchführen und sie dann im Backend dekodieren. Parameter können mit der Methode encodeURIComponent() von JavaScript codiert werden. Zum Beispiel:

$.ajax({
  type:'POST',
  url:url,
  data: {'name':encodeURIComponent('张三'),'age':20},
  success:function(data){
    console.log(data);
  }
});
Nach dem Login kopieren

Verwenden Sie im Backend die URLDecoder.decode()-Methode von Java, um Folgendes zu dekodieren:

String name = URLDecoder.decode(request.getParameter("name"), "UTF-8");
int age = Integer.parseInt(request.getParameter("age"));
Nach dem Login kopieren

Diese Methode ist problematischer und erfordert Kodierungs- und Dekodierungsvorgänge sowohl am Front- als auch am Back-End.

Methode 2: Ändern Sie den Anforderungsheader

Wir können den Anforderungsheader ändern, „Content-Type“ in „application/json;charset=utf-8“ ändern und das JSON-Format zum Übertragen von Daten verwenden. Zum Beispiel:

$.ajax({
  type:'POST',
  url:url,
  contentType: "application/json;charset=utf-8",
  data: JSON.stringify({'name':'张三','age':20}),
  success:function(data){
    console.log(data);
  }
});
Nach dem Login kopieren

Verwenden Sie im Backend den JsonParser von Java, um JSON zu analysieren:

JsonParser parser = new JsonParser();
JsonObject object = parser.parse(json).getAsJsonObject();
String name = object.get("name").getAsString();
int age = object.get("age").getAsInt();
Nach dem Login kopieren

Diese Methode ist relativ einfach, eignet sich jedoch nur für die Übertragung von Daten im JSON-Format.

Methode 3: Ändern Sie den Backend-Code

Wenn das Backend PHP verwendet, können Sie $_POST oder $_REQUEST direkt verwenden, um Parameterwerte ohne Kodierung oder Dekodierung abzurufen. Beispiel:

$name = isset($_POST['name']) ? $_POST['name'] : '';
$age = isset($_POST['age']) ? intval($_POST['age']) : 0;
Nach dem Login kopieren

Wenn das Backend Java verwendet, können Sie die getInputStream()-Methode von HttpServletRequest verwenden, um den Parameterwert abzurufen. Zum Beispiel:

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();
    }
  }
}
Nach dem Login kopieren

Als nächstes können wir JsonParser verwenden, um Daten im JSON-Format zu analysieren, oder Daten manuell im Format application/x-www-form-urlencoded analysieren.

Kurz gesagt, jede Methode hat ihre eigenen Vor- und Nachteile und wir können je nach Situation die Methode auswählen, die am besten zu uns passt. Unabhängig davon, welche Methode verwendet wird, müssen Sie auf die Kodierung und Dekodierung chinesischer Parameter achten, um verstümmelte Zeichen zu vermeiden.

Das obige ist der detaillierte Inhalt vonWas tun, wenn JQuery-Ajax-Parameter verstümmelte Zeichen übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage