|
|
|
| Приветствую!
Суть проблемы: при запросе
var t;
if (window.XMLHttpRequest)
{
t=new XMLHttpRequest();
}
else
{
t=new ActiveXObject("Microsoft.XMLHTTP");
}
t.onreadystatechange=function()
{
if (t.readyState==4 && t.status==200)
document.getElementById('in_info').innerHTML=t.responseText;
}
t.open('POST','all/2/tit_list.php',true);
t.setRequestHeader('Content-type','application/x-www-form-urlencoded');
var str = 'number=' + a;
t.send(str);
|
t.responseText возвращает содержимое и добавляет пустую строку в начало содержимого. Как показали опыты виной всему наличие MySql запроса в файле tit_list.php .
код Mysql запроса в tit_list.php
$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;
}
|
Как убрать пустую строку? | |
|
|
|
|
|
|
|
для: mikado3333
(20.08.2013 в 14:03)
| | Ну так почему не разберетесь с php-кодом отдельно (кстати в нем нет вывода вообще, если только не ошибка), без ajax?
Вы на современные браузеры рассчитываете? | |
|
|
|
|
|
|
|
для: 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 * 1 >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'>";$v1= OPROS ($number,$z);
echo "</div>";
echo "<br></div><br>";
}
?>
|
Да, на современные браузеры. Методом добавления /удаления выяснил , что если только имеется MySql запрос то появляется дополнительная пустая строка над содержимым. | |
|
|
|
|
|
|
|
для: mikado3333
(20.08.2013 в 17:50)
| | Зачем мне код ваш, к тому же некорректный - вы даже не проверив вернул ли что либо запрос, запускаете цикл и вывод.
Выполните отдельно этот код и посмотрите что возвращается, найдете причину. | |
|
|
|
|
|
|
|
для: mikado3333
(20.08.2013 в 17:50)
| | Перед
document.getElementById('in_info').innerHTML=t.responseText;
сделаейте
alert('"'+t.responseText+'"');
Если пустая строка действительно есть, вы ее увидите. Лично я не вижуу причин для появления пустой строки и подозреваю, что ее нет. | |
|
|
|
|
 21.5 Кб |
|
|
для: thisismy
(20.08.2013 в 18:02)
| | alert вывел два прямоугольника переде содержимым.
а вот что получается если без ajax, | |
|
|
|
|
|
|
|
для: mikado3333
(20.08.2013 в 18:25)
| | В помойку alert, разбирайтесь на сервере. Откуда кому либо знать как у вас должно - как на картинке вашей, или нет. И не картинки надо рассматривать, а изучать код ответа, то есть вне контекста ajax то, что этот код выдает в итоге. Непонятная пустота перед данными может быть следствием BOM, если вы работаете в UTF и сохраняете свои php-файлы с BOM.
И перепишите свой php-код, он ужасен. | |
|
|
|
|
|
|
|
для: confirm
(20.08.2013 в 18:40)
| | если не сложно, то опишите пару моментов - в чем ужас. Я учусь по книжкам, как в них написано так и пишу (ГИЗБЕРТ ДОМАШКЕ ) :)) | |
|
|
|
|
|
|
|
для: 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);
}
|
| |
|
|
|
|
|
|
|
для: 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"');
|
| |
|
|
|
|
|
|
|
для: mikado3333
(20.08.2013 в 23:03)
| | MySQL тут не причем, и достаточно:
mysql_query("SET NAMES 'UTF8'");
Зайдите в настройки своего редактора, найдите в нем нечто похожее на "Сохранять с BOM", и снимите выбор этой опции. Сохранение без BOM не означает "изменение" кодировки, так что без BOM "теперь у меня..." непосредственно к нему отношения не имеет.. | |
|
|
|