Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.02.2012, 18:53
Аспирант
Отправить личное сообщение для seregarem Посмотреть профиль Найти все сообщения от seregarem
 
Регистрация: 08.07.2010
Сообщений: 46

Ошибка в innerHTML таблицы в IE
Динамически подгружается содержимое таблицы
var request = null;
function createRequest() {
try { request = new XMLHttpRequest(); }
catch (trymicrosoft) {
	try { request = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch (othermicrosoft) {
		try { request = new ActiveXObject("Microsoft.XMLHTTP"); }
		catch (failed) { request = null; }
	}
}
if (request == null) alert("Ошибка при создании объекта XMLHttpRequest!");
}

function getKiosk(id, tp, p, city) {
url = "../php/getkiosk.php?p=" + id + "&tp=" +tp + "&p1=" + p + "&city=" + encodeURIComponent(city);
createRequest();
request.open("GET", url, true);
request.onreadystatechange = function() { makeKiosk(tp,p); };
request.send(null);
}

function makeKiosk(tp,p) {
if (request.readyState == 4) {
    if (request.status == 200) {
        xmlDoc = request.responseXML.documentElement;
        action = xmlDoc.getElementsByTagName("action")[0].firstChild.data;
		kiosk = xmlDoc.getElementsByTagName("kiosk")[0].firstChild.data;
		pages = xmlDoc.getElementsByTagName("pages")[0].firstChild.data;

        if (action == 'ok') {
			document.getElementById(tp).innerHTML = kiosk;
			document.getElementById(p).innerHTML = pages;
			$("a.fancybox").fancybox({
				'transitionIn'	: 'elastic',
				'transitionOut'	: 'elastic'
			});
        } else document.getElementById(tp).value = "";
    } else alert("Не удалось получить данные от сервера:\n" + request.statusText);
  }
}


$con = mysql_connect($host, $login, $pwd_db);
if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db($db, $con);
mysql_query('SET NAMES utf8;');


$c=$_GET[p];
$tp=$_GET[tp];
$p1=$_GET[p1];
$city=$_GET[city];

$d=$c*5;
$sql = "SELECT cms_module_products.id AS id, product_name, details, sku
FROM cms_module_products, cms_module_products_categories, cms_module_products_product_categories
WHERE cms_module_products.id=cms_module_products_product_categories.product_id AND cms_module_products_categories.id=cms_module_products_product_categories.category_id AND
name='$city' LIMIT ".$d.", 5";

$result=mysql_query($sql);

$res = '<![CDATA[';

$res.="<tr>
<th class=\"table_header\" width=\"70\">№</th> <th class=\"table_header\" width=\"160\"> </th> <th class=\"table_header\" width=\"160\">Адрес</th> <th class=\"table_header\" width=\"160\">Стороны <img style=\"vertical-align: middle; margin-left: 20px;\" src=\"images/side.png\" alt=\"\" /></th> <th class=\"table_header\" width=\"390\">Информация</th>
</tr>";


while ($row=mysql_fetch_array($result)){
	$img1=''; $img2=''; $img3=''; $img4='';
	$sql_img = "SELECT fielddef_id, value FROM cms_module_products_fieldvals WHERE product_id=$row[id]";

	$result_img=mysql_query($sql_img);
	while ($img=mysql_fetch_array($result_img)){
		switch ($img[fielddef_id]) {
		case 1:
			$img1='/uploads/Products/product_'.$row[id]."/".$img[value];
			$thumb1='/uploads/Products/product_'.$row[id]."/thumb_".$img[value];
			break;
		case 2:
			$img2='/uploads/Products/product_'.$row[id]."/".$img[value];
			$thumb2='/uploads/Products/product_'.$row[id]."/thumb_".$img[value];
			break;
		case 3:
			$img3='/uploads/Products/product_'.$row[id]."/".$img[value];
			$thumb3='/uploads/Products/product_'.$row[id]."/thumb_".$img[value];
			break;
		case 4:
			$img4='/uploads/Products/product_'.$row[id]."/".$img[value];
			$thumb4='/uploads/Products/product_'.$row[id]."/thumb_".$img[value];
			break;
		}

	}

	$res.="<tr>";
	$res.="<td width=\"70\" class=\"table_num1\"><span class=\"num_kiosk\">$row[sku]</span></td>";
	$res.="<td width=\"160\" class=\"table_l1\">";


	if ($img1!='') {$res.="<img src=\"".$thumb1."\" class=\"thumb\" />";
	} elseif ($img2!='') {$res.="<img src=\"".$thumb2."\" class=\"thumb\" />";
	} elseif ($img3!='') {$res.="<img src=\"".$thumb3."\" class=\"thumb\" />";
	}elseif ($img4!='') {$res.="<img src=\"".$thumb4."\" class=\"thumb\" />";
	}else{$res.="<img src=\"images/side_temp.png\" class=\"thumb\" />";
	}

	$res.="</td>";
	$res.="<td width=\"160\" class=\"table_l1\">$row[product_name]</td>";
	$res.="<td width=\"160\" class=\"table_l1\">";

if($img1!=''){ $res.="<a class=\"fancybox\" href=\"$img1\"><img alt=\"\" src=\"images/side_a_active.png\" /></a>";}
else { $res.="<img src=\"images/side_a.png\" />";}

if($img2!=''){ $res.="<a class=\"fancybox\" href=\"$img2\"><img alt=\"\" src=\"images/side_b_active.png\" /></a>";}
else { $res.="<img src=\"images/side_b.png\" />";}

if($img3!=''){ $res.="<a class=\"fancybox\" href=\"$img3\"><img alt=\"\" src=\"images/side_c_active.png\" /></a>";}
else { $res.="<img src=\"images/side_c.png\" />";}

if($img4!=''){ $res.="<a class=\"fancybox\" href=\"$img4\"><img alt=\"\" src=\"images/side_d_active.png\" /></a>";}
else { $res.="<img src=\"images/side_d.png\" />";}

$res.="<br /><br /><p style=\"color: #b80000;\"><strong>просмотр фото</strong></p>";

$res.="</td>";
$res.="<td width=\"390\" class=\"table_l1\">$row[details]</td>";
$res.="</tr>";
}
$res.=']]>';


$sql = "SELECT count(*)
FROM cms_module_products, cms_module_products_categories, cms_module_products_product_categories
WHERE cms_module_products.id=cms_module_products_product_categories.product_id AND cms_module_products_categories.id=cms_module_products_product_categories.category_id AND
name='$city'";

$result=mysql_query($sql);
$row=mysql_fetch_array($result);
$num=$row[0];
$q=$row[0]/5;
$row[0]=floor($row[0]/5);

$pages = '<![CDATA[';
$pages.="<div class=\"total_kiosk\"><p>Всего ".$num." киосков</p></div>";
$pages.="<div class=\"links_kiosk\">";

if($c-2>=0){ $i=$c-2; } else $i=0;

if($c+2<=$row[0]){ $m=$c+2; } else $m=$row[0];

$pages.="<div class=\"first_btn_address\" onclick=\"getKiosk(0,'$tp','$p1','$city');\"><p>‹‹ ‹‹</p></div>";

if($c>0){
$pages.="<div class=\"btn_address\" onclick=\"getKiosk(".($c-1).",'$tp','$p1','$city');\"><p>‹‹</p></div>";
}
else {
$pages.="<div class=\"btn_address\" onclick=\"getKiosk(0,'$tp','$p1','$city');\"><p>‹‹</p></div>";
}

while ($i<=$m){
$j=$i+1;
if($c==$i){
$pages.="<div class=\"btn_address_active\"><p id=\"activepage\">$j</p></div>";
$cur_page=$i;
}else {
  $pages.="<div class=\"btn_address\" onclick=\"getKiosk($i,'$tp','$p1','$city');\"><p>$j</p></div>";
}
$i++;
}

$pages.="<div class=\"btn_address\" onclick=\"getKiosk(".($cur_page+1).",'$tp','$p1','$city');\"><p>››</p></div>";
$pages.="<div class=\"first_btn_address\" onclick=\"getKiosk($row[0],'$tp','$p1','$city');\"><p>›› ››</p></div>";

$pages.="</div>";
$pages.=']]>';

mysql_close($con);

$response = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><response><action>ok</action><kiosk>'.htmlspecialchars_decode($res).'</kiosk><pages>'.htmlspecialchars_decode($pages).'</pages></response>'; 
header('Content-Type: application/xml');
echo $response;


На строке document.getElementById(tp).innerHTML = kiosk; возникает ошибка: Неизвестная ошибка выполнения.

В инете нашел, что innerHTML в таблицах в IE не работает, пишут, что только через DOM. Как я понял, через DOM можно создавать только элемент таблицы. А у меня php-скрипт формирует полностью содержимое table. Возможно ли как-то без innerHTML присвоить таблице полностью все содержимое, например,
<tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>


Вот на этой странице ошибка: http://marketmedia-kirov.ru/index.php?page=portfolio

Последний раз редактировалось seregarem, 28.02.2012 в 18:56.
Ответить с цитированием
  #2 (permalink)  
Старый 28.02.2012, 18:54
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

tbody
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #3 (permalink)  
Старый 28.02.2012, 19:15
Аспирант
Отправить личное сообщение для seregarem Посмотреть профиль Найти все сообщения от seregarem
 
Регистрация: 08.07.2010
Сообщений: 46

добавил tbody:
$res.="<tbody><tr>
<th class=\"table_header\" width=\"70\">№</th> <th class=\"table_header\" width=\"160\"> </th> <th class=\"table_header\" width=\"160\">Адрес</th> <th class=\"table_header\" width=\"160\">Стороны <img style=\"vertical-align: middle; margin-left: 20px;\" src=\"images/side.png\" alt=\"\" /></th> <th class=\"table_header\" width=\"390\">Информация</th>
</tr>";
...
$res.='</tbody>';


Но не помогло
Ответить с цитированием
  #4 (permalink)  
Старый 28.02.2012, 19:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от seregarem
Возможно ли как-то без innerHTML присвоить таблице полностью все содержимое
рад что вы исправили запрос на сервер )))
погуглите ещё даже на этом сайте есть примеры по вставке содержимого таблицы без innerHTML
Ответить с цитированием
  #5 (permalink)  
Старый 28.02.2012, 19:54
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

seregarem,
в таблице всегда есть tbody, в него вставляйте.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #6 (permalink)  
Старый 28.02.2012, 20:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Nekromancer
в таблице всегда есть tbody, в него вставляйте.
можно пример?
Ответить с цитированием
  #7 (permalink)  
Старый 28.02.2012, 21:05
Аватар для allergencore
Интересующийся
Отправить личное сообщение для allergencore Посмотреть профиль Найти все сообщения от allergencore
 
Регистрация: 14.11.2010
Сообщений: 11

Сообщение от Nekromancer Посмотреть сообщение
seregarem,
в таблице всегда есть tbody, в него вставляйте.
открываем opera dragonfly и страницу
<table>
<tr>
<td>r1c1</td>
<td>r1c2</td>
</tr>
...
</table>

в итоге во вкладке "документы" получаем
<table>
<thead>
...
</thead>
<tbody>
</tbody>
...
</table>

Последний раз редактировалось allergencore, 28.02.2012 в 21:08.
Ответить с цитированием
  #8 (permalink)  
Старый 28.02.2012, 21:36
Аспирант
Отправить личное сообщение для seregarem Посмотреть профиль Найти все сообщения от seregarem
 
Регистрация: 08.07.2010
Сообщений: 46

allergencore, не понял ваш пост.
Ответить с цитированием
  #9 (permalink)  
Старый 28.02.2012, 21:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

seregarem, ам!
function makeKiosk(tp, p) {
    if (request.readyState == 4) if (request.status == 200) {
        xmlDoc = request.responseXML.documentElement;
        action = xmlDoc.getElementsByTagName("action")[0].firstChild.data;
        kiosk = xmlDoc.getElementsByTagName("kiosk")[0].firstChild.data;
        pages = xmlDoc.getElementsByTagName("pages")[0].firstChild.data;
        var tk = document.getElementById(tp);
        while (tk.firstChild) tk.removeChild(tk.firstChild);
        if (action == "ok") {
            var el = document.createElement("div");
            el.innerHTML = "<table >" + kiosk + "</table>";
            while (el.firstChild.rows[0]) tk.appendChild(el.firstChild.rows[0]);
            document.getElementById(p).innerHTML = pages;
            $("a.fancybox").fancybox({
                "transitionIn": "elastic",
                "transitionOut": "elastic"
            })
        }
    } else alert("Не удалось получить данные от сервера:\n" + request.statusText)
};

и выкиньте $res = '<![CDATA[';
$pages.=']]>';
Ответить с цитированием
  #10 (permalink)  
Старый 28.02.2012, 22:02
Аватар для allergencore
Интересующийся
Отправить личное сообщение для allergencore Посмотреть профиль Найти все сообщения от allergencore
 
Регистрация: 14.11.2010
Сообщений: 11

Сообщение от seregarem Посмотреть сообщение
allergencore, не понял ваш пост.
я имел ввиду, что при интерпретации html элемент tbody генерируется всегда
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Через ajax отправить много данных из таблицы на сервер Heger jQuery 3 29.08.2012 18:51
В чем ошибка при выводе таблицы? KamalovRadik Серверные языки и технологии 3 18.02.2012 14:30
Ошибка в заполнениии InnerHtml new0111 Элементы интерфейса 1 27.12.2011 22:36
То-ли лыжи не едут, толи... возможно ошибка в коде. AzriMan Общие вопросы Javascript 19 18.05.2009 16:07
ошибка с innerHTML Gekt0r Общие вопросы Javascript 15 21.08.2008 11:57