How to set encoding in .getJSON jQuery
-
09-06-2019 - |
Frage
In meinem web-app, die ich vorlegen, ein Formular mit jQuery $.getJSON()
Methode.Ich habe einige Probleme mit der Codierung.Der Charakter-der app charset=ISO-8859-1
, aber ich denke, dass diese Felder werden zusammen mit UTF-8
.
Wie kann ich set encoding verwendet $.getJSON
Anrufe?
Lösung
Ich denke, dass Sie wahrscheinlich zu verwenden $.ajax()
wenn Sie möchten ändern Sie die Codierung finden Sie in der contentType
param unten (die success
und error
angenommen, Sie haben Rückrufe <div id="success"></div>
und <div id="error"></div>
im html-Code):
$.ajax({
type: "POST",
url: "SomePage.aspx/GetSomeObjects",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{id: '" + someId + "'}",
success: function(json) {
$("#success").html("json.length=" + json.length);
itemAddCallback(json);
},
error: function (xhr, textStatus, errorThrown) {
$("#error").html(xhr.responseText);
}
});
Ich eigentlich gerade zu tun hatte, das vor etwa einer Stunde, was für ein Zufall!
Andere Tipps
Wenn Sie verwenden möchten $.getJSON()
Sie können fügen Sie die folgenden, bevor der Anruf :
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
Sie können den Zeichensatz Sie möchten statt utf-8
.
Die Optionen erklärt hier.
contentType :
Wenn das senden der Daten an den server, verwenden Sie diese content-type
.Standardmäßig ist application/x-www-form-urlencoded
, und das ist gut für die meisten Fälle.
scriptCharset :
Nur für Anfragen, die mit jsonp
oder script
Datentyp und HOLEN Sie sich geben.Kräfte der Wunsch interpretiert werden als eine bestimmte Zeichenkodierung.Nur benötigt für den charset-Unterschiede zwischen den remote-und lokalen Inhalten.
Sie müssen möglicherweise eine oder beide ...
Sie müssen analysieren Sie die JSON-Anrufe mit Wireshark verfolgen, so sehen Sie aus, wenn Sie das charset in der Bildung der JSON-Seite haben oder nicht, zum Beispiel:
- Wenn die Seite ist einfach, wenn text / html
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 .Content -Type: t 0020 65 78 74 2f 68 74 6d 6c 0d 0a 43 61 63 68 65 2d ext/html ..Cache- 0030 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63 68 Control: no-cach
- Wenn die Seite ist von der Art, einschließlich benutzerdefinierter JSON-MIME "charset = ISO-8859-1"
0000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 0010 0a 43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 .Cache-C ontrol: 0020 6e 6f 2d 63 61 63 68 65 0d 0a 43 6f 6e 74 65 6e no-cache ..Conten 0030 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d t-Type: text/htm 0040 6c 3b 20 63 68 61 72 73 65 74 3d 49 53 4f 2d 38 l; chars et=ISO-8 0050 38 35 39 2d 31 0d 0a 43 6f 6e 6e 65 63 74 69 6f 859-1..C onnectio
Warum ist das so?weil wir können nicht auf der Seite von JSON ein Ziel wie dieses:
In meinem Fall nutze ich den Hersteller Connect Me 9210 Digi:
- Ich musste ein flag, um anzugeben, dass für den Einsatz von nicht-standard-MIME:p-> theCgiPtr-> = fDataType eRpDataTypeOther;
- Er fügte hinzu, die neue MIME in die variable:strcpy (p-> theCgiPtr-> fOtherMimeType, "text / html;charset = ISO-8859-1 ");
Es funktionierte für mich die zimmerreserviereung, ohne das Sie konvertieren die Daten von JSON für UTF-8 und wiederholen Sie dann die Konvertierung auf der Seite ...
Verwenden encodeURI()
in client-JS und-Nutzung URLDecoder.decode()
in server-Java-Seite funktioniert.
Beispiel:
Javascript:
$.getJSON( url, { "user": encodeURI(JSON.stringify(user)) }, onSuccess );
Java:
java.net.URLDecoder.decode(params.user, "UTF-8");
Verwenden Sie diese Funktion, um wieder die utf-8-Zeichen
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
Beispiel:
var new_Str=decode_utf8(str);