Проблем с ajax и php header

dx22

New member
Пращам рекуест до скрипт ползвайки ajax. Кода работи идеално под chrome и mozzila, но с IE(ползвам версия 7) не работи. След търсене и дебъгване установих, че проблема е в това, че в пхп скрипта имам следния ред:

Код:
header('Content-Type: text/html; charset=cp1251');

и в резултат, когато в джаваскрипта се опитам да достъпя

Код:
xmlhttp.responseText;

получавам грешка.Ако махна реда в php скрипта всичко работи, но енкодинга е омазан. В един форум видях, че някой беше стигнал до същия извод като мен, но нямаше написано решение на проблема.
Какво бихте препоръчали? Дори да е някакъв фикс специално за IE пак става ще го направя и така, но разбира се за предпочитане е по-генерална стратегия.

Предварително поклон пред човека, който успее да ме измъкне от IE мъките ми 🙂
 
Re: Проблем с ajax и php header

Защо не ползваш ajax функционалността на някой js фреймуърк от рода на JQuery, който ще те предпази от всякакви крос-браузър мизерии ?
Когато за пръв използвах ajax бях точно като теб - хванах стандартния джаваскриптски XMLHttpRequest и беше оле майко ... Даже сега бегло се сещам, че трябваше да се направи проверка за по-старите версии на IE и за тях да се използва не XMLHttpRequest, ами Microsoft.XMLHTTP като ActiveX обект (абе лудница).
Пак ти казвам - един js фреймуърк ще ти спести адски много главоболия, не само казусът, с който се сблъскваш сега, но и по-нататък.
 
Re: Проблем с ajax и php header

Ами по принцип си прав. Аз даже тия дни си бях свалил jQuery, но още не съм го вкарал в упортеба. Поста ти ме окуражи да го направя, но резултат нямаше.
Ето вместо стандартния код сложих това:

Код:
$.ajax({
	  url: url1,
	  success: function(data) {
			alert('response ready');
			$('#results').html(data);
			alert(data);
	  }
	});

И отново същата история. Под mozilla и chrome всичко е добре и си показва резултатите в #results(това е div с id=results), но в IE7 - нищо. За разлика от предния път когато показваше някаква грешка(която не даваше никаква полезна информация) сега просто нищо не се случва. И отново ако махна в php скрипта реда с header(...) всичко е ок навсякъде и се генерират резултати, но с омазан енкодинг. Това наистина започва да ме притеснява, защото сайта е изцяло на български и разчитам да правя подобни неща често.

@po_taka кой низ да кодирам? http query-то за гет заявката ли? Ако да, как се очаква да го кодирам?
 
Последно редактирано:
Re: Проблем с ajax и php header

ако низа е с UTF-8 има ли проблем? Да не би файлът ти, от който викаш ajax-a, да е с UTF-8 и когато върнатия стринг е друга кодировка IE да се шашка? По принцип (мое мнение) е по-добре всичко да е UTF-8 - и файлът в браузера и файлът, който се вика с Ajax и резултатът, който се прехвърля. За файловете - става въпрос да са записани като UTF-8 without BOM и да имат и meta tag encoding указан а в респонса на php-to да не е charset=cp1251 a utf-8
 
Re: Проблем с ajax и php header

bgvisit е абсолютно прав!
ajax работи без проблеми единствено и само с utf8, когато става дума за кирилица!
с всичко останало става голяма боза.
също така, пробвай и с text/plain.
 
Re: Проблем с ajax и php header

Хах стана. Играх си 1-2 часа да сменя колациите на таблиците към утф, в хтмл-а и на другите места, после хванах всички файлове от проекта и един по един им смених енкодинга към утф.
Сега даже не ми е нужен тоя хедър в пхп скрипта, въпреки че от интерес пробвах да видя дали ще работи ако има някакъв хедър.
Явно наистина ajax разбира само от утф за кирилица. Жалко, че ми отне няколко часа за да го разбера 🙂 Мерси , че помогнахте кой знае кога щях да се сетя да го направя така.

За хората, които искат като мен да позлват ajax и кирилица успешно:
  • Ползвайте еднакъв енкодинг навсякъде(хтмл, пхп-скриптовете, базата).За предпочитане utf.
  • Самите файлове с кода записвайте с енкодинг UTF-8 without BOM.Аз пиша на Notepad++ и там си го има това като опция, както и във всеки по-читав редактор предполагам.
  • Макар, че в моя случай това не беше проблема все пак е препоръчително е да се позлва фреймуърк за ajax заявките за да избегнете разни проблеми.
  • Ако не ви е поставено като изискване НЕ се занимавайте с IЕ 🙂 Сега разбирам защо хората го мразят. Първи уеб проект ми е това и досега винаги, когато има проблем е с IE.
 
Re: Проблем с ajax и php header

Мисля че XML request въобще не поддържа нещо различно от utf8.

Така е

По някога обаче (голям сайт с много данни и/или мързел) не може да се конвертира всичко на UTF. Тогава просто се кодират/декодират данните при ползването им в javascript и няма проблем.
 

Back
Горе