Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ajax и отличие кодировки, для одного и того же запроса 
V
    Опции темы
Magnetic
Дата 19.7.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 11.11.2006

Репутация: нет
Всего: 1



Кодировка всех страниц windows-1251. Есть страница 1, с которой осуществляется аяксовый запрос старницу 2. Находимся на странице 1, кликаем по ссылке, которая ведет на эту же страницу. Делаем аяксовый запрос на страницу 2. Странице 2 приходит значение параметра с русским текстом в кодировке windows-1251. Находясь на странице 1 кликаем по адресной строке и жмем Enter, страница перезагружается, делаем аяксовый запрос на страницу 2, которой приходит параметр в кодировке utf-8. Надо, чтобы в обоих случаях кодировка оставалась одинаковой либо windows-1251 либо utf8. Firebug показывает одни и те же хедеры для первого и для второго запроса. Запросы делал и с помощью jquery и с помощью xmlhttprequest - результат одинаковый. Проблема в ФФ. ИЕ работает как надо. Кто-то сталкивался с подобным?

Это сообщение отредактировал(а) Magnetic - 19.7.2009, 14:53
--------------------
Dude, where's my car?
PM MAIL   Вверх
bars80080
Дата 19.7.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



аякс всегда налагает дополнительные претензии по кодировке. решение вопроса вполне удачно заключается в обработке данных пересылаемых туда-сюда. со стороны клиента с помощью функций encodeURIComponent, со стороны сервера (если пхп) rawurldecode и iconv('utf-8', 'cp1251', $text). в обратную сторону соответствующие функции. там просто надо попробовать и установить нужную комбинацию этих функций
PM MAIL WWW   Вверх
IDVsbruck
Дата 19.7.2009, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



ajax никогда не налагает претензии по кодировке - просто надо всегда использовать utf-8

Сегодняшние требования накладывают соответствующие условия - давно пора отказаться от всех этих 1251 и прочих - преобразования всегда более затратны, чем использование одной кодировки, это удобней и практичней. О символах и многоязычности я просто молчу.
PM MAIL   Вверх
Magnetic
Дата 20.7.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 11.11.2006

Репутация: нет
Всего: 1



bars80080, помогли, спасибо!
--------------------
Dude, where's my car?
PM MAIL   Вверх
Nikola661
Дата 4.9.2009, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 14.5.2007

Репутация: нет
Всего: 1



Цитата(IDVsbruck @  19.7.2009,  21:05 Найти цитируемый пост)
ajax никогда не налагает претензии по кодировке - просто надо всегда использовать utf-8

Я использую struts с валидацией.
Есть JSP
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<html>
<head>
<link rel="stylesheet" href="../../theme/Master.css" type="text/css">
<title>regworker</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='${pageContext.request.contextPath}/pages/regkassa/ajax.js'>
</script>
<script type="text/javascript" charset="UTF-8">
function do_submit(obj) {
    var contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
    var http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
            // look down
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        alert('Error. Copy of class by XMLHTTP not created');
        return false;
    }
    http_request.open('POST', 'add-worker.do', true);
    http_request.onreadystatechange = function() { alertContentsSubmit(http_request); };
    http_request.setRequestHeader('Content-Type', contentType);
    
    var fm = obj.fam.value;
    var im = obj.im.value;
    var ot = obj.ot.value;
    var id_dolgn = obj.id_dolgnost.options[obj.id_dolgnost.selectedIndex].value;
    var id_goverm = obj.id_goverment.options[obj.id_goverment.selectedIndex].value;
    var id_depart = obj.id_department.options[obj.id_department.selectedIndex].value;
    
    var strsend = "fam="+fm+"&im="+im+"&ot="+ot+"&id_dolgnost="+id_dolgn+"&id_goverment="+id_goverm+"&id_department="+id_depart;
    http_request.send(strsend);
}
function alertContentsSubmit(http_request) {
    var el = document.getElementById('loading');
    el.innerHTML=pageStatus;
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            //alert(http_request.responseText);
            
            el.innerHTML=http_request.responseText;
        } else {
         el.innerHTML="Request problem!";
            alert('Request problem!');
            //self.close();
        }
    }
}
</script>
</head>
<body>
<div id="loading" align="center">
</div>
<html:form action="/add-worker" method="post">
<table width="300" border="1" align="center">
  <tr>
    <td colspan="2"><bean:message key="budjet.kom.worker.fam"/>:</td>
  </tr>
  <tr>
    <td colspan="2"><input type="text" name="fam" value="${fam}"/></td>
  </tr>
  <tr>
    <td colspan="2"><bean:message key="budjet.kom.worker.im"/>:</td>
  </tr>
  <tr>
    <td colspan="2"><input type="text" name="im" value="${im}"/></td>
  </tr>
  <tr>
    <td colspan="2"><bean:message key="budjet.kom.worker.ot"/>:</td>
  </tr>
  <tr>
    <td colspan="2"><input type="text" name="ot" value="${ot}"/></td>
  </tr>
  <tr>
    <td colspan="2"><bean:message key="budjet.kom.worker.dolgn"/>:</td>
  </tr>
  <tr>
    <td colspan="2">
    <select name="id_dolgnost" style="color: green;">
    <c:forEach items="${ListDolgn}" var="dolg" varStatus="st">
        <option value="${dolg.id_dolgnost}">${dolg.name_dolgn}</option>
    </c:forEach>
    </select>
    <c:set var="ListDolgn" value="${ListDolgn}" scope="page"/>
    </td>
  </tr>
  <tr>
    <td colspan="2"><bean:message key="budjet.kom.worker.goverment"/>:</td>
  </tr>
  <tr>
    <td colspan="2">
    <select name="id_goverment" style="color: green;" onchange="getDepartment(this)">
    <c:forEach  items="${ListGoverment}" var="g" varStatus="st">
        <option value="${g.id_goverment}">${g.name_goverment}</option>
    </c:forEach>
    </select>
    <c:set var="ListGoverment" value="${ListGoverment}" scope="page" />
    </td>
  </tr>
  <tr>
    <td colspan="2"><bean:message key="budjet.kom.worker.department"/>:</td>
  </tr>
  <tr>
    <td colspan="2">
    <div id="department_layer">
     
    </div>
    </td>
  </tr>
  <tr>
    <td><input type="button" name="add" value="Добавить" onclick="do_submit(this.form)" /></td>
    <td><input type="reset" name="res" value="Отмена" /></td>
  </tr>
</table>
</html:form>
</body>
</html>

Код бина и валидатора. Можно было и выложить код Action'а, но там точно так же выводятся "???????????????"
Код

public class Worker extends ActionForm {
    private long id_worker;
    private long id_dolgnost;
    private String name_dolgn;
    private String fam;
    private String im;
    private String ot;
    private long id_department;
    private String name_department; 
    private long id_goverment;
    private String name_goverment;
    
    public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
        ActionErrors errors = new ActionErrors();
        
        Config conf = new Config("config");
        SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
        Calendar cal = new GregorianCalendar();
        cal.getInstance();
        System.out.println("---"+request.getParameter("fam")+"---");//ТУТ ВЫВОДЯТСЯ "?????????????????"
        
        if (request.getParameter("fam")==null || request.getParameter("fam").equals("")) {
            System.out.println("<"+request.getParameter("fam")+">");
            request.setAttribute("fam", fam);
            errors.add("fam",new ActionMessage("errors.kom.worker.problem",conf.getProperty("budjet.kom.worker.fam")));
        }
        if (request.getParameter("im")==null || request.getParameter("im").equals("")) {
            request.setAttribute("im", im);
            errors.add("im",new ActionMessage("errors.kom.worker.problem",conf.getProperty("budjet.kom.worker.im")));
        }
        if (request.getParameter("ot")==null || request.getParameter("ot").equals("")) {
            request.setAttribute("ot", ot);
            errors.add("ot",new ActionMessage("errors.kom.worker.problem",conf.getProperty("budjet.kom.worker.ot")));
        }
        if (request.getParameter("id_dolgnost").equals("-1")) {
            request.setAttribute("id_dolgnost", id_dolgnost);
            errors.add("id_dolgnost",new ActionMessage("errors.kom.worker.dolgn"));
        }
        if (request.getParameter("id_goverment").equals("-1")) {
            request.setAttribute("id_goverment", id_goverment);
            errors.add("id_goverment",new ActionMessage("errors.kom.worker.goverment"));
        }
        if (request.getParameter("id_department").equals("-1")) {
            request.setAttribute("id_department", id_department);
            errors.add("id_department",new ActionMessage("errors.kom.worker.department"));
        }
        return errors;
    }
             ..................
             // гетеры и сетеры
             ..................
}


Когда я передавал не используя AJAX, то для того чтобы вывести рус буквы я делал так:
Код

public class Encode {
    public static String decode(String input) {
         try {
            if (input != null) {
                byte[] tmp = input.getBytes("ISO-8859-1");
                return (new String(tmp, "UTF-8"));
            } else {
                return null;
            }
        } catch (UnsupportedEncodingException ex) {
            return null;
        }
    }
}


Но теперь когда начал использовать ajax даже это не помогает. Как можно решить эту проблему!?!?!?

Это сообщение отредактировал(а) Nikola661 - 4.9.2009, 10:19
PM MAIL   Вверх
Nikola661
Дата 6.9.2009, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 14.5.2007

Репутация: нет
Всего: 1



Цитата(bars80080 @  19.7.2009,  18:24 Найти цитируемый пост)
со стороны клиента с помощью функций encodeURIComponent, со стороны сервера (если пхп) rawurldecode и iconv('utf-8', 'cp1251', $text)


Ура! Победил! Не внимательно читал пост.
На странице так:
Код

 var strsend = "fam="+encodeURIComponent(fm)+"&im="+encodeURIComponent(im)+"&ot="+encodeURIComponent(ot)+"&id_dolgnost="+id_dolgn+"&id_goverment="+id_goverm+"&id_department="+id_depart;
    http_request.send(strsend);



в Action'е так:
Код

System.out.println("---"+URLDecoder.decode(request.getParameter("fam"))+"---");//ТУТ ВЫВОДЯТСЯ


Это сообщение отредактировал(а) Nikola661 - 6.9.2009, 10:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1265 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.