Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.03.2012, 19:12
Liv Liv вне форума
Интересующийся
Отправить личное сообщение для Liv Посмотреть профиль Найти все сообщения от Liv
 
Регистрация: 22.03.2012
Сообщений: 17

Кодировка в AJAX из ИЕ
Есть проблема - не знаю как решается!
AJAXом передается на сервер слово, по которому возвращается результат поиска в БД. В Опера, ФФ, Хроме - всё нормально, но ИЕ передаёт само слово в кодировке win-1251, а не UTF. Страницы в UTF, заголовки прописаны.... Я мог бы перекодировать в PHP это слово, но придётся тогда дополнительно делать проверку - в какой кодировке пришло (дополнительные тормоза и ошибки), т.к. Опера, ФФ и Хром передают слово в правильной кодировке...

Подскажите - где копать?!!!
Ответить с цитированием
  #2 (permalink)  
Старый 22.03.2012, 23:58
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

откровенно говоря пальцем в небо, но хочется помочь)
попробуйте encodeURI(ваш текст)
Ответить с цитированием
  #3 (permalink)  
Старый 23.03.2012, 00:34
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

Слово из формы? попробуйте accept-charset в форму добавить.
Ответить с цитированием
  #4 (permalink)  
Старый 23.03.2012, 00:36
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

Rootpassword, а encodeURI не подойдёт? я для себя
Ответить с цитированием
  #5 (permalink)  
Старый 23.03.2012, 11:37
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от tadjik1 Посмотреть сообщение
Rootpassword, а encodeURI не подойдёт? я для себя
нет. оно не меняет кодировку.
Ответить с цитированием
  #6 (permalink)  
Старый 23.03.2012, 12:06
Новичок на форуме
Отправить личное сообщение для Stropik Посмотреть профиль Найти все сообщения от Stropik
 
Регистрация: 15.03.2012
Сообщений: 8

Если в остальных браузерах нормально, то, возможно, в ИЕ у вас стоит принудительное приведение к какой-либо кодировке.
Ответить с цитированием
  #7 (permalink)  
Старый 23.03.2012, 13:21
Liv Liv вне форума
Интересующийся
Отправить личное сообщение для Liv Посмотреть профиль Найти все сообщения от Liv
 
Регистрация: 22.03.2012
Сообщений: 17

Сообщение от tadjik1
попробуйте encodeURI(ваш текст)
Нет, это не подходит.

Сообщение от Rootpassword
попробуйте accept-charset в форму добавить
Не помогло... Пока работает скрипт - нормально, в UTF (проверил alert'ами), а на сервер приходит уже в win-1251.

Сообщение от Stropik
в ИЕ у вас стоит принудительное приведение к какой-либо кодировке
Я не нашёл такого... где менять можно? Да и не у одного меня так, было проверено на 6 компах в разных местах.
Ответить с цитированием
  #8 (permalink)  
Старый 23.03.2012, 13:59
Новичок на форуме
Отправить личное сообщение для Stropik Посмотреть профиль Найти все сообщения от Stropik
 
Регистрация: 15.03.2012
Сообщений: 8

Где-то наткнулся на похожий случай, там решением было выставление заголовка вместо
Content-type: application/x-javascript; charset=utf-8
нужно было поставить
Content-type: application/json; charset=utf-8

то есть для конкретного типа данных кодировка устанавливается.
Ответить с цитированием
  #9 (permalink)  
Старый 23.03.2012, 14:30
Liv Liv вне форума
Интересующийся
Отправить личное сообщение для Liv Посмотреть профиль Найти все сообщения от Liv
 
Регистрация: 22.03.2012
Сообщений: 17

Сообщение от Stropik Посмотреть сообщение
Где-то наткнулся на похожий случай, там решением было выставление заголовка вместо
Content-type: application/x-javascript; charset=utf-8
нужно было поставить
Content-type: application/json; charset=utf-8

то есть для конкретного типа данных кодировка устанавливается.
Немного не понял, где прописывать этот заголовок?
Вот последовательность:
при submit формы в скрипте проверяется поле и формируется строка запроса AJAX
...
	if(forma.raionfull.value!="") {
alert("проверка:"+ forma.raionfull.value); <-- здесь кодировка - ОК
		str += "~raion="+forma.raionfull.value;
	}
...

затем строка запроса отправляется в AJAX:
// функция, срабатываемая на основном интервале
function getData(curvar,data,obj,sess,dop) {
	var senddata = curvar+"|"+data+"|"+dop;
alert("данные="+data); <-- здесь кодировка - ОК
	// запросим сервер
		var newData=getXMLDocument(senddata,sess);
		// проверим - если равна null
		if(newData!="null" || newData!="") {
			if(obj=="") {
				return(newData);
			} else {
				document.getElementById(obj).innerHTML = newData;
			}
		}
}
// функция запроса данных с сервера
function getXMLDocument(data,sess) {  
	var xml1;  
alert("запрос:"+data); <-- здесь кодировка - ОК
	var fullurl = url+"/request.php?data="+ data+"&ses="+sess;
	if(window.XMLHttpRequest) {  
		xml1=new XMLHttpRequest();  
		xml1.open("GET", fullurl, false);  
		xml1.send("");  
		// если надо получать именно XML, то включается это:
		//return xml1.responseXML;  
		// иначе будет только текст
		return xml1.responseText;
	} else if(window.ActiveXObject) {
			xml1=new ActiveXObject("Microsoft.XMLDOM");  
			xml1.async=false;  
			xml1.load(fullurl);  
			return xml1;  
	} else {
		alert("Загрузка XML не поддерживается браузером");  
		return null;  
	}
}

а уже на сервере делаю проверку, то получаю следующее:
saveerror("request: data=".$data);

в ИЕ:
2012-03-23 11:12:53 - request: data=cat_fullpoi|none=none~kod_obj=0~typ=0~vid=0~raion=��_val=0~id_val_ar=0~onlyfoto=0|

тогда как в Опера - всё правильно:
2012-03-23 11:13:43 - request: data=cat_fullpoi|none=none~kod_obj=0~typ=0~vid=0~raion=центр~id_val=0~id_val_ar=0~onlyfoto=0|
Ответить с цитированием
  #10 (permalink)  
Старый 23.03.2012, 15:05
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

Вообще, проблема ИЕ в том, что у него весьма поганая поддержка utf-8, так что проблема неудивительна.
в частности, спецсимволы utf-8 для него большая проблема, там большая история глюков.
Для начала, выведите все переменные окружения сервера при приходе данных, через ваш saveerror
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax таблица gofkane Работа 0 25.09.2011 11:53
Много раз поднимался вопрос... Кодировка AJAX запроса sano45 AJAX и COMET 3 17.08.2011 22:27
Не та кодировка при изменении элементов DOM, загружаемых через ajax ShootNik Серверные языки и технологии 16 14.10.2010 09:55
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06