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

HTML+CSS+JavaScript

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: ajax, responseText

Сообщения:  [1-10]   [11-11] 

 
 автор: confirm   (21.08.2013 в 05:55)   письмо автору
 
   для: mikado3333   (20.08.2013 в 23:03)
 

MySQL тут не причем, и достаточно:
mysql_query("SET NAMES 'UTF8'");

Зайдите в настройки своего редактора, найдите в нем нечто похожее на "Сохранять с BOM", и снимите выбор этой опции. Сохранение без BOM не означает "изменение" кодировки, так что без BOM "теперь у меня..." непосредственно к нему отношения не имеет..

  Ответить  
 
 автор: mikado3333   (20.08.2013 в 23:03)   письмо автору
 
   для: confirm   (20.08.2013 в 19:29)
 

confirm, большое спасибо за замечания. В дальнейшем постараюсь учитывать все моменты описанные вами. По поводу моего вопроса - Вы были правы, действительно все дело в UTF-8 с Bom. Без Bom нет пустой строки, но теперь у меня вместо русских букв "крякозяблы" . Не подскажете ли куда копать с кодировками? При конекте с MySql я использую следующее


@mysql_select_db($database, $dp)or die (mysql_error());
// в какой кодировке получать данные от клиента
@mysql_query('set character_set_client="utf8"');

// в какой кодировке получать данные от БД для вывода клиенту
@mysql_query('set character_set_results="utf8"');

// кодировка в которой будут посылаться служебные команды для сервера
@mysql_query('set collation_connection="utf8_general_ci"');

  Ответить  
 
 автор: confirm   (20.08.2013 в 19:29)   письмо автору
 
   для: mikado3333   (20.08.2013 в 18:45)
 

$number = ($_POST ['number']); - зачем здесь скобки? Да и вообще, писать такое ради присвоения другой переменной зачем? Смысла то ведь в этом нет никакого, вы с успехом можете в запрос вставить и $_POST ['number']. Вот только делать этого не следует - все переменные пришедшие извне нужно проверять, приводить к типу, который вы ожидаете, экранировать. Иначе это большая потенциальная дыра в безопасности.
В данном случае вы ожидаете числовое значение, значит нужно $number = (int)$_POST ['number'];

echo"<p class = 'tit_zag'>* ТИТУЛЬНЫЙ ЛИСТ *</p>";

А ведь вы еще не сделали запроса к базе, и не известно чем он закончится, зачем же вы сразу делаете вывод в браузер этого заголовка?

while ($dp = @mysql_fetch_object ($Sql))...

А если результатом будет "ничего"? Надо наверное проверять вернул ли что-то запрос или нет, а не клеить собаку бесполезную к функции mysql_fetch_object().

<?
if(mysql_num_rows($sql)) {
   
//и удостоверившись только тогда
   
while(...) { //и без собак ненужных
      //цикл
   
}
   
//и здесь вывод, включая и заголовок, который вы выводили преждевременно
}

Вообще код нужно структурировать - определение переменных, вывод или обработка их, а не произвольная смесь. Это улучшает читаемость кода, его логику.

В запросе приучите себя писать как-то однотипно - выражения MySQL в верхнем регистре, переменные и имена полей в нижнем, так легко читать выражение, находить ошибки. Первичны конструкции mysql, а не переменные для него.

Для современных браузеров (включая и IE) объект XMLHttpRequest() определяется просто - var xhr = new XMLHttpRequest(); А вот с учетом и стареньких, для предотвращения экцессов, лучше писать так:
function newAJAX(){     // функция для создания объекта AJax
   var xhr = false;
   try {
       xhr = new XMLHttpRequest();
   } catch (trymicrosoft) {
       try {
            xhrt = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (othermicrosoft) {
            try {
              xhr = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (failed) {
                xhr = false;
            }
       }
   }
   return(xhr);
}

  Ответить  
 
 автор: mikado3333   (20.08.2013 в 18:45)   письмо автору
 
   для: confirm   (20.08.2013 в 18:40)
 

если не сложно, то опишите пару моментов - в чем ужас. Я учусь по книжкам, как в них написано так и пишу (ГИЗБЕРТ ДОМАШКЕ ) :))

  Ответить  
 
 автор: confirm   (20.08.2013 в 18:40)   письмо автору
 
   для: mikado3333   (20.08.2013 в 18:25)
 

В помойку alert, разбирайтесь на сервере. Откуда кому либо знать как у вас должно - как на картинке вашей, или нет. И не картинки надо рассматривать, а изучать код ответа, то есть вне контекста ajax то, что этот код выдает в итоге. Непонятная пустота перед данными может быть следствием BOM, если вы работаете в UTF и сохраняете свои php-файлы с BOM.

И перепишите свой php-код, он ужасен.

  Ответить  
 
 автор: mikado3333   (20.08.2013 в 18:25)   письмо автору
21.5 Кб
 
   для: thisismy   (20.08.2013 в 18:02)
 

alert вывел два прямоугольника переде содержимым.

а вот что получается если без ajax,

  Ответить  
 
 автор: thisismy   (20.08.2013 в 18:02)   письмо автору
 
   для: mikado3333   (20.08.2013 в 17:50)
 

Перед
document.getElementById('in_info').innerHTML=t.responseText;
сделаейте
alert('"'+t.responseText+'"');
Если пустая строка действительно есть, вы ее увидите. Лично я не вижуу причин для появления пустой строки и подозреваю, что ее нет.

  Ответить  
 
 автор: confirm   (20.08.2013 в 18:00)   письмо автору
 
   для: mikado3333   (20.08.2013 в 17:50)
 

Зачем мне код ваш, к тому же некорректный - вы даже не проверив вернул ли что либо запрос, запускаете цикл и вывод.
Выполните отдельно этот код и посмотрите что возвращается, найдете причину.

  Ответить  
 
 автор: mikado3333   (20.08.2013 в 17:50)   письмо автору
 
   для: confirm   (20.08.2013 в 17:24)
 

Вот весь код tit_list.php


<?
$number 
= ($_POST ['number']);
include(
"conect.inc");
////////////////////////////////////////////////////////////////////////////////////////// вывод титульного листа

    
echo"<p class = 'tit_zag'>* ТИТУЛЬНЫЙ ЛИСТ *</p>";        
                                                        
$mass_ceh=array("");                                                                     // массив с номерами цехо и служб используемых в журнале в колонке кому
$Sql mysql_query ("select * FROM AIRPLAN_$number  where STATYS = 'ОТКРЫТ'||STATYS = 'ПЕРЕАДРЕСОВАН'order by N") or die("НЕ могу собрать массив цехов");    // собираем массив
    
while ($dp = @mysql_fetch_object ($Sql))
        {
            
$MQ $dp -> CEH_KOMY;
                (!
in_array($MQ,$mass_ceh)) ? $mass_ceh[]= $MQ :1;
        }
    unset(
$mass_ceh[0]);
    
natsort($mass_ceh);

    foreach(
$mass_ceh as $k=>$z)
        {
            (
$z >0) ? $slovo 'ЦЕХ' $slovo '';
            echo 
"<div  class = 'block'>";
            echo 
"<span class = 'nomer_ceha'> $slovo $z </span>";
            echo 
"<input type = \"button\" value = \"i\" class = \"info_button\" onclick= 'info(\"$z\",\"$number\");'>";
            echo 
"<div class = 'nomera_voprosov'>";$v1OPROS ($number,$z);
            echo 
"</div>";
            echo 
"<br></div><br>";    
        }
            
?>

Да, на современные браузеры. Методом добавления /удаления выяснил , что если только имеется MySql запрос то появляется дополнительная пустая строка над содержимым.

  Ответить  
 
 автор: confirm   (20.08.2013 в 17:24)   письмо автору
 
   для: mikado3333   (20.08.2013 в 14:03)
 

Ну так почему не разберетесь с php-кодом отдельно (кстати в нем нет вывода вообще, если только не ошибка), без ajax?
Вы на современные браузеры рассчитываете?

  Ответить  

Сообщения:  [1-10]   [11-11] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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