Javascript.RU

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

Не та кодировка при изменении элементов DOM, загружаемых через ajax
Проблема подробнее:

Файл index.html:
<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" >
   <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript" src="geoip.js"></script>
  </head>
  <body>
    <div id="add_ads"><a href='javascript:void(null)'>Добавить объявление</a></div>
    <div id="geoip_ads">text</div>
  </body>
</html>


В файле geoip.js есть функция:
$('#add_ads').click(function() {
          $.post('show_ads.php?add=add', function(data) { $('#geoip_ads').html(data);})


В файле show_ads.php:
case 'add': 
    echo '
    <script type="text/javascript" src="check_reg.js"></script>
      <form id="regform" target="_self" style="margin: 0px;" name="regform" method="post" action="show_ads.php">
          <div id="authtitle">Регистрация</div>
        <table cellpadding="2" cellspacing="2" align="center" id="authtable">
          <tr>
            <td id="regtd">Логин:</td>
            <td id=""><input name="login" type="text" id="logininput" onchange="checkLogin()" autocomplete="off" /><div id="logincheck"> &nbsp<br>&nbsp</div></td>
          </tr>
          ...
       </form>';
  break;


В скрипте check_reg.js функция:
function checkLogin(){
          var userlogin = $("#logininput").attr('value');
          var reg= /^[a-zA-Z0-9_]{2,15}$/ ;
          if (reg.test(userlogin)) {
            $("#logincheck").load("/geoip/show_ads.php", {add: "checklogin", data:userlogin});          
          } else {
            if (userlogin.length < 2){
              $("#logincheck").html('<span style="color:red">Минимальная длина = 2</span>'); 
            } 
   ....еще условия...
          }
        }


Собственно, проблема - когда я ввожу в поле логин больше двух символов и он проверяется на сервере, ответ приходит в cp1251 и отображается нормально, а когда меньше двух символов, проверка проходит в ява-скрипте и
$("#logincheck").html('<span style="color:red">Минимальная длина = 2</span>');
почему то получается в utf-8 кракозябрами. Если эту форму не подгружать через ajax, то работает в любом случае.
Помогите, как сделать что бы всегда cp1251 была?
Ответить с цитированием
  #2 (permalink)  
Старый 11.10.2010, 20:54
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

в AJAX по-умолчанию кодировка UTF-8

windows-1251е - архаизм, но если уж используете прочтите статью.

Последний раз редактировалось monolithed, 11.10.2010 в 21:00.
Ответить с цитированием
  #3 (permalink)  
Старый 11.10.2010, 22:39
Новичок на форуме
Отправить личное сообщение для ShootNik Посмотреть профиль Найти все сообщения от ShootNik
 
Регистрация: 11.10.2010
Сообщений: 7

AJAX нормально все отдает, в той кодировке, которая и ожидается, если пишу
header('Content-type: text/html; charset=windows-1251');
контент отдается в 1251, если
header('Content-type: text/html; charset=utf-8');
то utf-8. А с клиента на сервер, я не передаю ничего в кириллице.
Что мне непонятно, почему
$("#logincheck").html('<span style="color:red">Минимальная длина = 2</span>');
где никакого аякса нет (единственное, применяется он к элементу, загруженному через аякс), оказывается в кодировке utf-8?
Ответить с цитированием
  #4 (permalink)  
Старый 12.10.2010, 13:55
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Если не дойдет с первого раза, прочитать 51 раз аки мантру: javascript - utf-8

ps: кодировку html файла проверьте, в какой отдается с сервера, в какой пишите. Других вариантов вроде и нет.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 12.10.2010 в 14:13.
Ответить с цитированием
  #5 (permalink)  
Старый 12.10.2010, 20:59
Новичок на форуме
Отправить личное сообщение для ShootNik Посмотреть профиль Найти все сообщения от ShootNik
 
Регистрация: 11.10.2010
Сообщений: 7

А вот не получается utf8 в данном случае, сайт не мой.
Вообщем нашел 2,5 решения:
1) check_reg.js пересохранить все-таки в utf-8. Работает, но почему не пойму, пхп скрипт отдает браузеру строчку
echo '<script type="text/javascript" src="check_reg.js"></script>...
и браузер (4 разных пробовал) почему-то загружает этот скрипт всегда в utf-8, хотя то что идет следом за ним <div id="authtitle">Регистрация</div> отображется в той кодировке что нужно (win-1251).
2) вместо
echo '<script type="text/javascript" src="check_reg.js"></script>'
вывести сразу его содержимое
echo ' <script type="text/javascript">
        function checkLogin(){            
          var userlogin = $("#logininput").attr("value");
          var reg= /^[a-zA-Z0-9_]{2,15}$/ ;
          if (reg.test(userlogin)) {
            $("#logincheck").load("/geoip/show_ads.php", {add: "checklogin", data:userlogin});          
          } else {
            if (userlogin.length < 2){
              $("#logincheck").html("<span style=\"color:red\">Минимальная длина = 2</span>"); 
            } else {
              if (userlogin.length > 15){
                $("#logincheck").html("<span style=\"color:red\">Максимальная длина = 15</span>"); 
              } else {
                $("#logincheck").html("<span style=\"color:red\">Только латинские буквы и цифры</span>");  		
              }
            }	     
          }
        }
</script>';
Работает тоже.
2,5) Вывести сразу, но что бы не тянуть в пхп скрип и не долбаться с кавычками:
echo '<script type="text/javascript">';
echo file_get_contents('check_reg.js'); 
echo '</script>';
На этом варианте и остановился.
Если кто знает, почему
echo '<script type="text/javascript" src="check_reg.js"></script>
подключается браузером в утф, объясните, пожалуйста.
пс: Фразы про то что js ajax в utf-8 можно не повторять, я понял/знаю.

Последний раз редактировалось ShootNik, 12.10.2010 в 21:01.
Ответить с цитированием
  #6 (permalink)  
Старый 13.10.2010, 08:45
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от ShootNik Посмотреть сообщение
1) check_reg.js пересохранить все-таки в utf-8. Работает, но почему не пойму
потому что
Сообщение от Gozar Посмотреть сообщение
javascript - utf-8
зы: т.к. до вас туго доходит, а мне лень объяснять все, но меня радует что вы хотите разобраться как это работает, то я вам подскажу, а остальное дойдет со временем.

Сообщение от ShootNik Посмотреть сообщение
пхп скрипт отдает браузеру строчку
echo '<script type="text/javascript" src="check_reg.js"></script>...
мысль не верная, правильно так -
пхп скрипт отдает браузеру строчку
<script type="text/javascript" src="check_reg.js"></script>

, соответственно браузер запрашивает файл check_reg.js, который в вашем случае в utf-8, в результате всё ок.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #7 (permalink)  
Старый 13.10.2010, 10:18
Новичок на форуме
Отправить личное сообщение для ShootNik Посмотреть профиль Найти все сообщения от ShootNik
 
Регистрация: 11.10.2010
Сообщений: 7

Цитата:
т.к. до вас туго доходит
эээх, тупить так тупить - почему тогда если написать тоже самое сразу в index.html
<script type="text/javascript" src="check_reg.js"></script>
причем кодировка check_reg.js 1251, то все подключается и читается по русски? Я считал, что браузер должен одинаково обрабатывать разметку как написанную заранее, так и подгруженную позже, ан нет.
Ответить с цитированием
  #8 (permalink)  
Старый 13.10.2010, 10:31
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

ShootNik,
вы какой-то бред говорите. Браузер понятия не имеет, заранее вы подготовили вёрстку или через echo вывели. Он получает сформированный html-документ. Он даже не знает, что на сервере PHP работает.
Ответить с цитированием
  #9 (permalink)  
Старый 13.10.2010, 10:48
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

если база 0, то никакими советами не поможешь
ShootNik, прочтите что такое кодировка, что такое браузер, как он формирует документы и т.д. в общем базу начальных знаний вам нужно.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #10 (permalink)  
Старый 13.10.2010, 12:21
Новичок на форуме
Отправить личное сообщение для ShootNik Посмотреть профиль Найти все сообщения от ShootNik
 
Регистрация: 11.10.2010
Сообщений: 7

Сообщение от Kolyaj
Браузер понятия не имеет, заранее вы подготовили вёрстку или через echo вывели. Он получает сформированный html-документ. Он даже не знает, что на сервере PHP работает.
Согласен. Так почему же в случае заранее подготовленной верстки, он подгружает скрипт в win-1251, а в случае
$.post('show_ads.php?do=add', function(data) { $('#geoip_ads').html(data);})
где data это та же самая строчка
<script type="text/javascript" src="check_reg.js"></script>
скрипт подгружается в utf-8?
Если этот вопрос неадкватный, то не знаю что и сказать, попробуйте повторить ситуацию, исходные данные я довольно внятные предоставил, кода там на пять минут копировать... "базу начальных знаний".. ну да, вчера увидел браузер и решил авторизацию аяксовую написать.. перед тем как задавать вопрос, я поискал в нете ответ на него, не нашел - спросил тут.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
событие, которое срабатывает при изменении DOM структуры amigo* Events/DOM/Window 30 11.04.2017 13:39
Послать форму загруженную через ajax в div используя ajax ncux jQuery 2 16.08.2010 16:36
утечка памяти при создании DOM MadLord Общие вопросы Javascript 2 16.08.2010 11:01
Проверка наличия логина в БД при регистрации, с помощью ajax storng Общие вопросы Javascript 4 09.04.2010 19:24
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 15:06