Come impostare la codifica in .getJSON jQuery
-
09-06-2019 - |
Domanda
Nella mia web app, vi sottopongo alcuni campi del form con jQuery $.getJSON()
metodo.Sto avendo alcuni problemi con la codifica.Il set di caratteri la mia app è charset=ISO-8859-1
, ma penso che questi campi sono presentati con UTF-8
.
Come posso impostare la codifica utilizzata in $.getJSON
chiamate?
Soluzione
Penso che probabilmente dovrete utilizzare $.ajax()
se si desidera modificare la codifica, vedere il contentType
param qui di seguito (il success
e error
richiamate si supponga di disporre di <div id="success"></div>
e <div id="error"></div>
in html):
$.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);
}
});
In realtà ho dovuto fare questo circa un'ora fa, che coincidenza!
Altri suggerimenti
Se si desidera utilizzare $.getJSON()
è possibile aggiungere la seguente prima della chiamata :
$.ajaxSetup({
scriptCharset: "utf-8",
contentType: "application/json; charset=utf-8"
});
È possibile utilizzare il set di caratteri che si desidera, invece di utf-8
.
Le opzioni sono spiegato qui.
contentType :
Quando l'invio dei dati al server, è possibile utilizzare questo content-type
.Di Default è application/x-www-form-urlencoded
, che è bene per la maggior parte dei casi.
scriptCharset :
Solo per le richieste con jsonp
o script
il tipo di dati e di OTTENERE il tipo.Le forze che la richiesta di essere interpretato come un determinato set.Necessario solo per il set di caratteri differenze tra il telecomando e il contenuto locale.
Potrebbe essere necessario uno o entrambi ...
È necessario analizzare il JSON chiamate utilizzando Wireshark, così potrete vedere se si include il set di caratteri nella formazione del JSON pagina o non, per esempio:
- Se la pagina è semplice, se il testo / 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
- Se la pagina è di tipo JSON personalizzato con 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
Perché è che?perché non siamo in grado di mettere sulla pagina del JSON un obiettivo come questo:
Nel mio caso io uso il produttore Mi 9210 Digi:
- Ho dovuto usare un flag per indicare che l'uso non-standard MIME:p-> theCgiPtr-> = fDataType eRpDataTypeOther;
- È stato aggiunto il nuovo MIME nella variabile:strcpy (p-> theCgiPtr-> fOtherMimeType, "text / html;charset = ISO-8859-1 ");
Ha funzionato per me senza dover convertire i dati passati da JSON per UTF-8 e poi rifare la conversione sulla pagina ...
Utilizzare encodeURI()
in JS client e utilizzare URLDecoder.decode()
nel server Java lato funziona.
Esempio:
Javascript:
$.getJSON( url, { "user": encodeURI(JSON.stringify(user)) }, onSuccess );
Java:
java.net.URLDecoder.decode(params.user, "UTF-8");
Utilizzare questa funzione per ritrovare i caratteri utf-8
function decode_utf8(s) {
return decodeURIComponent(escape(s));
}
esempio:
var new_Str=decode_utf8(str);