Сведения о вопросе

Gaukhar

14:47, 11th August, 2020

Теги

Как установить кодировку в .getJSON jQuery

Просмотров: 482   Ответов: 5

В моем веб-приложении я отправляю некоторые поля формы с помощью метода jQuery $.getJSON() . У меня возникли некоторые проблемы с кодировкой. Набор символов моего приложения- charset=ISO-8859-1, но я думаю, что эти поля представлены с UTF-8 .

Как я могу установить кодировку, используемую в вызовах $.getJSON ?



  Сведения об ответе

KOMP

10:07, 23rd August, 2020

Если вы хотите использовать $.getJSON() , вы можете добавить следующее перед вызовом :

$.ajaxSetup({
    scriptCharset: "utf-8",
    contentType: "application/json; charset=utf-8"
});

Вы можете использовать кодировку, которую хотите, вместо utf-8 .

Варианты объяснены здесь .

contentType : при отправке данных на сервер используйте этот content-type . Значение по умолчанию- application/x-www-form-urlencoded, что в большинстве случаев нормально.

scriptCharset : только для запросов с типом jsonp или script dataType и GET. Заставляет запрос интерпретироваться как определенная кодировка. Требуется только для различий в кодировке между удаленным и локальным содержимым.

Вам может понадобиться один или оба ...


  Сведения об ответе

baggs

14:50, 8th August, 2020

Я думаю, что вам, вероятно, придется использовать $.ajax() , если вы хотите изменить кодировку, см. contentType param ниже (обратные вызовы success и error предполагают, что у вас есть <div id="success"></div> и <div id="error"></div> в 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);
    }
});

Вообще - то я должен был сделать это около часа назад, какое совпадение!


  Сведения об ответе

9090

08:30, 29th August, 2020

Вам нужно проанализировать вызовы JSON с помощью Wireshark, так что вы увидите, включаете ли вы кодировку в формирование страницы JSON или нет, например:

  • Если страница простая, если текст / 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
  • Если страница имеет тип, включающий пользовательский 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

А почему это так? потому что мы не можем поставить на странице JSON такую цель:

В моем случае я использую производителя Connect Me 9210 Digi:

  • Мне пришлось использовать флаг, чтобы указать, что будет использоваться нестандартный MIME: п-> theCgiPtr-> = fDataType eRpDataTypeOther;
  • Он добавил новый MIME в переменную: strcpy (p - > theCgiPtr-> fOtherMimeType, " text / html; кодировка = ISO-8859-1 ");

Это сработало для меня без необходимости конвертировать данные, переданные JSON для UTF-8, а затем повторить преобразование на странице ...


  Сведения об ответе

SILA

14:48, 19th August, 2020

Используйте encodeURI() в клиенте JS и используйте URLDecoder.decode() в стороне сервера Java.


Пример:

  • Javascript :

    $.getJSON(
        url,
        {
            "user": encodeURI(JSON.stringify(user))
        },
        onSuccess
    );
    
  • Java :

    java.net.URLDecoder.decode(params.user, "UTF-8");


  Сведения об ответе

SEEYOU

18:47, 14th August, 2020

Используйте эту функцию для восстановления символов utf-8

function decode_utf8(s) { 

  return decodeURIComponent(escape(s)); 

}

образец:

var new_Str=decode_utf8(str);


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться