JQuery: AJAX пост и кодирование - PullRequest
9 голосов
/ 08 июня 2009

Я не могу понять, почему я не могу получить правильный charstet ISO-8859-1 из ответа сервера. Поскольку это работа над устаревшим кодом, я вряд ли смогу изменить кодировку кодировки на страницах.

Я использую вызов JQuery

$.post("server-side-code", {t:ctext, i:ioff, sid:sessionid},  
    function(data, status) {            
       $('#chk').append(data); 
     });

публикация значения текстовой области, созданного с использованием JavaScript:

<form accept-charset='ISO-8859-1' method='post'>
<textarea cols='40' rows='8' id='commento'></textarea><br>
<input type='button' value='invia' id='submit'></form>

Серверный скрипт, обрабатывающий запрос, объявляет в самом верху:

text/html; charset=ISO-8859-1

так что, честно говоря, я не могу понять, что еще я должен объявить с точки зрения кодирования. Несмотря на это, акцентированные символы «àèéìòù» возвращаются в ответ: «Ã à © ìòù» при размещении ответа сервера в элементе HTML

Источник сохранен как ascii. Попытка сделать это, чтобы иметь элементарную Html-кодировку для публикуемой переменной, не решает:

ctext = escapeHTML(ctext);

function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}; 

Какая-то идея?

Спасибо!

Ответы [ 9 ]

5 голосов
/ 04 августа 2009

У меня есть лучшее решение сейчас. И отправлять и получать работы ОТЛИЧНО. Я работаю над Tomcat, который по умолчанию обрабатывает ISO 8859.

Свойства веб-страницы:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

кодировка веб-страницы внутри головы.

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

Теперь, все мои параметры экранированы с помощью функции escape, я предлагал это решение раньше.

(function($) {$.fn.escape = function() {
    return escape(this.val());};})(jQuery);

Теперь при отправке ajax-запроса я устанавливаю для contentType следующее:

contentType : "application/x-www-form-urlencoded; charset=iso-8859-1"

И, наконец, при получении параметров в сервлете или любом приемнике я получаю декодированный параметр, используя это.

    public String getHttpParameter(String name) throws Exception {
    String value = this.getHttpRequest().getParameter(name);
    return value == null || value.isEmpty() ? value : URLDecoder.decode(value,"ISO-8859-1");
}

POST и GET отлично работают в IE 7 и 8, SAFARI, CHROME и FIREFOX.

2 голосов
/ 13 сентября 2012

Я использовал следующее в javascript

escape($("#some_id").val()) 

и следующее в PHP

urldecode($var)

У меня это сработало.

1 голос
/ 11 ноября 2010

Пожалуйста, попробуйте использовать escape () в javascript и urldecode () в php-файле

это будет работать.

1 голос
/ 08 июня 2009

Не уверен, что это нарушает вашу ситуацию, но accept-charset крайне плохо поддерживается, и вы можете даже не использовать его. Это кодировка страницы, которая будет контролировать то, что отправляется обратно на сервер.

Было бы полезно, если бы вы посмотрели сохраненные файлы на вашем сервере, чтобы увидеть, являются ли данные в них хорошими или нет. Это, по крайней мере, установит, работает ли клиент-> серверная часть транзакции.

0 голосов
/ 25 июля 2013

Возможно, вы забыли объявить contentType на стороне сервера, прежде чем указывать его как UTF-8, в этом случае contentType имеет значение null и сервер не знает, с какими данными он имеет дело. Как только вы объявите contentType как UTF-8, сервер сможет понять, с какими типами данных он работает. Объявление contentType как UTF-8 не является правильным решением, хотя это помогает. Ответ, предоставленный Родриго, вероятно, будет лучшим решением для вашей проблемы.

0 голосов
/ 24 марта 2011

Я искал все выше и ниже аналогичной проблемы (запрос Windows-1250 с AJAX). Я нашел решение и разместил здесь: Как можно запрашивать переменные, закодированные с помощью encodeURIComponent с набором символов ISO-8859-1, а не utf-8?

0 голосов
/ 04 августа 2009

Все мои страницы - ISO-8859-1, мой ответ также 8859, но jquery ajax меня бесит Моим решением было обернуть оригинальную функциональность $ .ajax этим. Отлично работает для GET-запроса, и я скоро опубликую решение для POST-запроса.

Звонок:

$.myrequest({
  url: "/myapp/myurl",
  params: {
    key1: $("#myinput").escape()
  }
});

источник для функции выхода

(function($) {
$.fn.escape = function() {
    return escape(this.val());
};})(jQuery);

источник для функции myrequest

(function($) {

$.request = function(settings) {

    /**
     * generates a string that will be passed as 
     * data instead an object, but we have the capability
     * of pass an object but in another variable called param
     */
    function _parseParameters(settings) {
        var data = "";
        for (var param in settings.params) {
            data += param + "=" + settings.params[param] + "&";
        }
        settings.data = data;
    }
    _parseParameters(settings);
    $.ajax(settings);
}})(jQuery);
0 голосов
/ 02 июля 2009

Общая информация: http://www.w3.org/International/O-HTTP-charset

попробуйте преобразовать строку utf-8 с помощью utf8_decode () в php с входящими и исходящими данными.

0 голосов
/ 08 июня 2009

Насколько я знаю, jQuery использует кодировку веб-страницы, которая вызывает метод AJAX для интерпретации полученных данных. Вы используете правильную кодировку для страницы? Если да, то, скорее всего, ошибка связана с кодом сервера. Попробуйте вызвать программный обработчик AJAX (вне веб-браузера), чтобы увидеть, что он возвращает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...