Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ajax - полный облом
 
 автор: Владимир55   (06.11.2009 в 16:00)   письмо автору
 
 

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

А суть дела такая.

В тестовом файле .php размещен код для передачи:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Test Ajax 1</title>
</head>

<body>

<?php

    
// Файл записан в windows-1251
    
$data '<p><font color="#008000">RUSSIA РОССИЯ </font> <font color="#FF00FF"> Ajax</font></p>';

    echo 
$data iconv('cp1251''utf-8'$data);


?>


А в принимающем файле 4.рнр размещен код, позволяющий воспроизвести кириллицу "напрямую" и полученную через Аякс (для сравнения):
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Test Ajax 2</title>
</head>

<body>

<?php

    
echo '<p><font color="#008000">RUSSIA РОССИЯ </font> <font color="#FF00FF"> win 1251 </font></p>';

echo <<<TEXT
<div id="content"></div>
<script src="jquery.min.js"></script>
<script>
$.get('3.php', function(data){
  // в переменной data находится ответ от скрипта
  $('#content').html(data);
});
</script>
TEXT;


?>

Оба файла написаны в кодировке ANSI , то есть обычным образом с помощью редактора.

Эта модель прекрасно работает на Денвере. Воспроизводится как кириллица, заданная через 1251, так и кириллица, пришедшая через Аякс. Опробовано в ИЕ8, ФФ и Опера, причем запускающийся файл прекрасно виден в браузере в кодировке win 1251 для всех трех браузеров.


Эту модель из трех файлов, включая библиотеку, я переношу на свой сервер. И получаю вот что:
- ИЕ 8 не воспроизводит Аякс вообще, ни будучи в 1251, ни в UTF-8. То есть, не кракозябры, а вообще нет никаких следов присутствия Аякс;
- ФФ воспроизводит Аякс, автоматически устанавливаясь в 1251, а также в UTF-8;
- Опера воспроизводит Аякс и в режиме UTF-8, и в режиме кириллицы/автоопределение.


Если же в принимающем файле записать
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
, то ИЕ все равно не понимает Аякс, но тогда еще и ФФ перестает его понимать.

Сохранение самого файла в кодировке UTF-8 ничего не меняет.


Что посоветуете?
Как достичь нормальной работы страницы с Аяксом на сервере с каждым из трех браузеров?

  Ответить  
 
 автор: coloboc66   (06.11.2009 в 16:46)   письмо автору
 
   для: Владимир55   (06.11.2009 в 16:00)
 

Минимизируйте и конкретизируйте задачу и я сделаю её в биб-ке Котерова в трёх браузерах, на кириллице в UTF-8. Я эту гугловскую биб-ку не знаю. И знать не хочу.

  Ответить  
 
 автор: Саня   (06.11.2009 в 17:02)   письмо автору
 
   для: coloboc66   (06.11.2009 в 16:46)
 

Это не гугловская библиотека. Её написал парень по имени Джон Ресиг.

  Ответить  
 
 автор: Саня   (06.11.2009 в 17:01)   письмо автору
 
   для: Владимир55   (06.11.2009 в 16:00)
 

Уберите
<html> 

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> 
<title>Test Ajax 1</title> 
</head> 

<body>
из скрипта, в котором размещён код для передачи.

  Ответить  
 
 автор: Владимир55   (06.11.2009 в 17:22)   письмо автору
 
   для: Саня   (06.11.2009 в 17:01)
 

Убрал из передающего скрипта. Оно там, и вправду, ни к чему. Однако на результате это не сказалось - ИЕ как не показывал, так и не показывает ничего.

"Минимизируйте и конкретизируйте задачу"
В каком смысле? Мне надо, чтобы воспроизводилась кириллица, полученная средствами Аякс, а также действовали кнопки запуска внешнего файла.

Впрочем, есть и еще одна задача на ближайшее будущее: показывать через Аякс баннеры. Баннеры моего же сайта на другом моем сайте. Тут может случиться, что страница, на которой показывается баннер, будет в 1251.

А как запускатся библиотека Котерова? Не так?
<script src="jquery.min.js"></script>


А может, все же в настройках сервера проблема? Ведь денвер то отлично справляется с задачей! А чем денвер не сервер?

  Ответить  
 
 автор: sim5   (06.11.2009 в 17:42)   письмо автору
 
   для: Владимир55   (06.11.2009 в 17:22)
 

Кодировка должна быть указана не в передаваемом файле, хотя при необходимости вы можете передавать от сервера и сопутствующие заголовки, а на самой странице. Не принимать файл ваш скрипт может только в случае разрыва соединения, то есть, например, после указанного вами вызова выполняется еще операция AJAX-запроса к серверу и т.п.. Вы ведь не проверяете пришли данные или нет, возвращаемый статус запроса, и т.д..
Вот вы выполните тоже самое только не по загрузке документа, а по клику на какой либо элемент (то есть после загрузки страницы), и 100% получите содержимое, если у вас нет иных ошибок в коде.
Не надо бросаться от jQuery к Котерову, AJAX в jQuery это проще вам для понимания, проблем с кодировкой нет, если все верно делать, можете хоть UTF, хоть 1251 использовать (в соответствующей кодировке и сервер должен быть только настроен), и если все разумно делать, то проблем не будет.

jquery.min.js к Котерову ни какого отношения не имеет, это подключение jQuery.

  Ответить  
 
 автор: Владимир55   (06.11.2009 в 18:04)   письмо автору
 
   для: sim5   (06.11.2009 в 17:42)
 

Что бы понять истоки проблемы, я арендовал дополнительный хостинг и закачал туда вышеупомянутые файлы. Они здесь http://vova.1gb.ru/4.php И все чудесно работает! С любым браузером.

А у меня на ВДС - нет! Хотя файлы - те же.

Стало быть, причины в настройках сервера.

Но где искать эти причины, в каких настройках?

  Ответить  
 
 автор: AlexSol   (06.11.2009 в 21:24)   письмо автору
 
   для: Владимир55   (06.11.2009 в 18:04)
 

firefox+firebug там есть консоль ошибок, сможете опеделить на каком этапе сбой

  Ответить  
 
 автор: Trianon   (06.11.2009 в 22:25)   письмо автору
 
   для: AlexSol   (06.11.2009 в 21:24)
 

так с файрфоксом у Владимира проблем нет.
Проблемы с IE, как я понимаю.

  Ответить  
 
 автор: Саня   (06.11.2009 в 21:53)   письмо автору
 
   для: Владимир55   (06.11.2009 в 18:04)
 

Прикрепите отчет функции phpinfo() с каждого хостинга. И загляните в .htaccess.

  Ответить  
 
 автор: Владимир55   (06.11.2009 в 23:30)   письмо автору
58.9 Кб
 
   для: Саня   (06.11.2009 в 21:53)
 

Это отчет с хостинга, где скрипт работает нормально со всеми браузерами.

Файл .htaccess на этом хостинге отсутствует.

  Ответить  
 
 автор: Владимир55   (06.11.2009 в 23:48)   письмо автору
45.9 Кб
 
   для: Владимир55   (06.11.2009 в 23:30)
 

Это отчет хостинга, вызывающего проблемы.

Файл .htaccess на этом хостинге в настоящее время тоже отсутствует. Но обычно я в него заношу

RemoveHandler .html .htm 
AddType application/x-httpd-php .php .htm .html 

Options -Indexes


В чем принципиальное различие настроек? Уж не в этом ли:

Content-Type text/html; charset=cp1251

  Ответить  
 
 автор: sim5   (07.11.2009 в 06:20)   письмо автору
 
   для: Владимир55   (06.11.2009 в 23:48)
 

Content-Type text/html; charset=cp1251 - возможны проблемы с кодировкой, но не с отсутствием ответа для конкретно IE. Какой-никакой, но в IE8 появился отладчик, я бы воспользовался им, и еще бы проверил ответы сервера.

  Ответить  
 
 автор: coloboc66   (07.11.2009 в 09:25)   письмо автору
 
   для: Владимир55   (06.11.2009 в 23:48)
 

---

  Ответить  
 
 автор: Владимир55   (07.11.2009 в 11:32)   письмо автору
 
   для: coloboc66   (07.11.2009 в 09:25)
 

Проблема уходит удалением строки AddDefaultCharset cp1251 из файла httpd.conf

Корректно ли такое решение?

  Ответить  
 
 автор: Саня   (07.11.2009 в 12:49)   письмо автору
 
   для: Владимир55   (07.11.2009 в 11:32)
 

Да, корректно.
Можно заменить на AddDefaultCharset windows-1251. Возможно это тоже решит проблему.

  Ответить  
 
 автор: Trianon   (07.11.2009 в 15:06)   письмо автору
 
   для: Владимир55   (07.11.2009 в 11:32)
 

AddDefaultCharset никак не будет воздействовать на тот скрипт, который сам явно указывает кодировку контента через header('Content-Type...');
Так что можно обойтись и без удаления.

  Ответить  
 
 автор: sim5   (07.11.2009 в 15:14)   письмо автору
 
   для: Владимир55   (07.11.2009 в 11:32)
 

Вы хотите сказать, что с удалением кодировки по умолчанию, IE начинает получать ответы сервера, а с ней не получает вообще ничего?

  Ответить  
 
 автор: Саня   (07.11.2009 в 15:18)   письмо автору
 
   для: sim5   (07.11.2009 в 15:14)
 

Если скрипт не передаёт свой заголовок content-type с указанием кодировки, то отошлётся дефолтный. Видимо IE не осилил cp1251. Ему только windows-1251 подавай.

  Ответить  
 
 автор: sim5   (07.11.2009 в 15:38)   письмо автору
 
   для: Саня   (07.11.2009 в 15:18)
 

Да не должно быть такого, я специально проверил эту ситуацию на локальном и реальном сервере. Если есть путаница в кодировке, то квадратики в ответ, но чтобы вообще никакого ответа не приходило для IE, как говорит Владимир, такого не наблюдается.

  Ответить  
 
 автор: Sever   (14.12.2009 в 18:06)   письмо автору
 
   для: Владимир55   (06.11.2009 в 17:22)
 

>Мне надо, чтобы воспроизводилась кириллица, полученная средствами Аякс

Русская кодировка должна быть восьмибитной. Поэтому надо установить хедеру:
...Content-Transfer-Encoding: 8bit...


(тут можно подумать. Главное, чтобы небыл меньше, а больше быть может?)

Есть ещё один способ. Установить хедеру какой-то супер-мега интернациональный режим кодирования, который называется "quoted-printable"(он ещё используется при передаче почтовых сообщений методом mail()).
...Content-Transfer-Encoding: quoted-printable...

Например, в PHP так:
header('Content-Type: text/html; charset=Windows-1251 \n Content-Transfer-Encoding: quoted-printable\n');  

или
header('Content-Type: text/html; charset=Windows-1251 \n Content-Transfer-Encoding: 8bit\n');  


У меня оба способа работают. Только значок "+" везде трактуется как "пробел".

И ни кто не знает -
1. Как передавать текст от клиента серверу(а не обратно. Тем же методом AJAX, на низком уровне, а не с помощью библиотек, допустим, методом POST) в заданной кодировке? И если нет:
2. Как заставить ф-ю PHP5 convert_cyr_string() работать с форматом UTF-8? Конкретно, как заставить эту ф-ю преобразовать UTF-8 в w-1251? А то что-то не получается...

  Ответить  
 
 автор: Sergeich   (14.12.2009 в 19:13)   письмо автору
 
   для: Sever   (14.12.2009 в 18:06)
 

>2. Как заставить ф-ю PHP5 convert_cyr_string() работать с форматом UTF-8? Конкретно, как заставить эту ф-ю преобразовать UTF-8 в w-1251? А то что-то не получается...

А как вилкой суп есть не подскажете? А то что-то не получается! Почему-то суп выливается...
http://ua2.php.net/manual/en/function.convert-cyr-string.php

  Ответить  
 
 автор: Sever   (14.12.2009 в 21:54)   письмо автору
 
   для: Sergeich   (14.12.2009 в 19:13)
 

>>2. Как заставить ф-ю PHP5 convert_cyr_string() работать с форматом UTF-8? Конкретно, как заставить эту ф-ю преобразовать UTF-8 в w-1251? А то что-то не получается...
>
>А как вилкой суп есть не подскажете? А то что-то не получается! Почему-то суп выливается...
>http://ua2.php.net/manual/en/function.convert-cyr-string.php


Как некрасиво смотрится спесь...

Желающие читать и говорить на английском могут ехать в Англию. Граница открыта.(намёк ясен?)

И не надо строить из себя всезнающего чваниша. Любой человек несовершенное создание. И все знания мира в голову одного человека не поместятся никогда. Кто-то знает то, чего не знаю я, а я иногда знаю то, чего не знают другие. И так всегда и везде.
Если тебе задали вопрос отвечай по человечески, а не пытайся скорчить "ты не знаешь очевидного". В следующий раз очевидного можешь не знать сам. Я же не юродствую по поводу того, что здесь многие плохо представляют себе механизм AJAX. Если вы такой знающий, Sergeich, что это вы не ответил мне на 1 вопрос?
--------------------------------------------------------------------

Итак, скорее всего, с помощью convert_cyr_string() конвертировать UTF-8 ни во что не получится.
Именно поэтому возникают следующие вопросы:
1. В чём причина того, что при передаче данных нам надо пользоваться именно UTF-8?
2. Какими другими ф-циями конвертации русской кодировки надо пользоваться при работе с UTF-8?
3. При неимении ф-ций неплохо было бы указать спецификации кодировок.(сами ф-ции напишем)

Ага, по 3 пункту надыбал кое-что:
http://www.shtogrin.com/library/web/charsets/

А, вот теперь будет праздник и на нашей улице:
UTF-8
http://www.shtogrin.com/library/web/charsets/utf8/

Win-1251
http://www.shtogrin.com/library/web/charsets/windows-1251/

Пример преобразования текста из кодировки KOI-8 в Windows-1251:
http://www.pcre.ru/examples/other/text/20/

  Ответить  
 
 автор: Sergeich   (15.12.2009 в 01:34)   письмо автору
 
   для: Sever   (14.12.2009 в 21:54)
 

Я уже приводил некоторые ссылки с этого форума, где Вы могли найти ответы на Ваши вопросы.
В одной из этих ссылок была указана функция iconv('utf-8', 'windows-1251', $a);
где utf-8 - исходная кодировка, windows-1251 - получаемая, $a - конвертируемая строка. Но Вы же читать не хотите...

  Ответить  
 
 автор: ~AquaZ~   (14.12.2009 в 18:11)   письмо автору
 
   для: Владимир55   (06.11.2009 в 16:00)
 

<div id="content"></div> 
<script src="jquery.min.js"></script> 
<script> 
$.get('3.php', function(data){ 
  // в переменной data находится ответ от скрипта 
  $('#content').html(data); 
}); 
</script> 


хотябы упрости

<div id="content"></div> 
<script src="jquery.min.js"></script> 
<script> 
$('#content').load('3.php');
}); 
</script> 

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования