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.
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.
Um die oben genannten Probleme anzugehen, können wir die folgenden drei Lösungen verwenden:
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); } });
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"));
Diese Methode ist problematischer und erfordert Kodierungs- und Dekodierungsvorgänge sowohl am Front- als auch am Back-End.
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); } });
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();
Diese Methode ist relativ einfach, eignet sich jedoch nur für die Übertragung von Daten im JSON-Format.
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;
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(); } } }
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!