Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Ошибка в innerHTML таблицы в IE (https://javascript.ru/forum/css-html-internet-explorer/26166-oshibka-v-innerhtml-tablicy-v-ie.html)

seregarem 28.02.2012 18:53

Ошибка в 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

Nekromancer 28.02.2012 18:54

tbody

seregarem 28.02.2012 19:15

добавил 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>';


Но не помогло

рони 28.02.2012 19:17

Цитата:

Сообщение от seregarem
Возможно ли как-то без innerHTML присвоить таблице полностью все содержимое

рад что вы исправили запрос на сервер )))
погуглите ещё даже на этом сайте есть примеры по вставке содержимого таблицы без innerHTML

Nekromancer 28.02.2012 19:54

seregarem,
в таблице всегда есть tbody, в него вставляйте.

рони 28.02.2012 20:09

Цитата:

Сообщение от Nekromancer
в таблице всегда есть tbody, в него вставляйте.

можно пример?

allergencore 28.02.2012 21:05

Цитата:

Сообщение от Nekromancer (Сообщение 160469)
seregarem,
в таблице всегда есть tbody, в него вставляйте.

открываем opera dragonfly и страницу
<table>
<tr>
<td>r1c1</td>
<td>r1c2</td>
</tr>
...
</table>

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

seregarem 28.02.2012 21:36

allergencore, не понял ваш пост.

рони 28.02.2012 21:45

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.=']]>';

allergencore 28.02.2012 22:02

Цитата:

Сообщение от seregarem (Сообщение 160491)
allergencore, не понял ваш пост.

я имел ввиду, что при интерпретации html элемент tbody генерируется всегда


Часовой пояс GMT +3, время: 09:51.