XHTMLhttpRequest nefunguje v IE

Smokie

XHTMLhttpRequest nefunguje v IE
« kdy: 31. 05. 2011, 13:42:59 »
Zdravím,

v IE mi nechce fungovať Xhtmlhttprequest a neviem prísť na to kde je problém. Už som skúšal rôzne ActiveX objekty, aj podľa MSDN a podobne, ale nezaberá to...

Kód vyzerá takto:


Kód: [Vybrat]
<script type="text/javascript">
function showCatgLevel(str, element, level)
{
if (str=="")
  {
  document.getElementById(element).innerHTML="Fault";
  return;
  }

  if (window.XMLHttpRequest){
    var xmlhttp = new XMLHttpRequest()
  }
  else
  {
    if (window.ActiveXObject)
    {
      var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.6.0");
    }
  }

//xmlhttp.onreadystatechange=function()
//  {
//  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    //{
    //document.getElementById(element).innerHTML=xmlhttp.responseText;
    //}
  //}
xmlhttp.open("GET","/web/personel/wp-content/plugins/wp-job-manager/ajax_catg_vypis.php?level="+level+"&id="+str,false);
xmlhttp.send();
document.getElementById(element).innerHTML=xmlhttp.responseText;
}
</script>

To čo je zakomentované je kód pre asynchronny prístup. Teraz je nastavený synchronny. Pre skúšku... Už som skúšal všetko.

Ide o trojicu selectov na výber kategórie a podkategórií. V prvom selecte sú hlavné kategórie a podľa výberu hlavnej kategórie sa v druhom selecte načítajú jej podkategórie a tak ďalej... Defaultne je v každom selecte jeden option s pomlčkou.
V Chrome a Firefoxe nie je problém. Problém je iba v IE. Po výbere v prvom selecte sa ten druhý úplne vyprázdni, ale tak aj ostane. Nenaplní sa údajmi.

Napadlo mi aj to, či nie je problém v ceste k php súboru. Tak som odstránil z cesty všetky zložky
Kód: [Vybrat]
xmlhttp.open("GET","ajax_catg_vypis.php?level="+level+"&id="+str,false);a cesta tak viedla do zložky wp-admin (je to plugin k WordPressu), ale pokus o vykonanie skriptu vrátil chybu 500.
« Poslední změna: 31. 05. 2011, 14:11:40 od Petr Krčmář »


Cpt.Nemo

Re: XHTMLhttpRequest nefunguje v IE
« Odpověď #1 kdy: 31. 05. 2011, 14:17:18 »
Rad bych videl zbytek kodu pro praci s temy options, jestli nebude pes zakopanej spise tam ...
A zkusil jste to pomoci jQuery nebo jineho JS frameworku?

Smokie

Re: XHTMLhttpRequest nefunguje v IE
« Odpověď #2 kdy: 31. 05. 2011, 14:59:47 »
Ano, nakoniec som to skúsil s jQuery a dostal som kód, ktory funguje.


Kód: [Vybrat]
<script type="text/javascript">
function showCatgLevel(str, element, level)
{
if (str=="")
  {
  document.getElementById(element).innerHTML="Fault";
  return;
  }

    var url = "/web/personel/wp-content/plugins/wp-job-manager/ajax_catg_vypis.php?level="+level+"&id="+str;
    jQuery.get(url, {}, function(data) {callback(data, element);}, 'text');
}

function callback(data, element) {
  alert(data);
  alert(element);
  var output = document.getElementById(element);
  output.innerHTML = data;
  clear();
}
</script>

Ale problém sa stále nevyriešil. Iba som zistil to, že aj v IE sa dáta z databázy vytiahnú a zobrazia v alerte. Či tie data ťahal úspešne aj ten pôvodný skript neviem, nenapadlo mi vtedy debuggovať cez alert.

Problém je stále ten AKO donutiť to *** IE získane data vložiť do elementu, v tomto prípade selectu. innerHTML neberie, value tiež neberie...

Smokie

Re: XHTMLhttpRequest nefunguje v IE
« Odpověď #3 kdy: 31. 05. 2011, 15:29:42 »
Rad bych videl zbytek kodu pro praci s temy options, jestli nebude pes zakopanej spise tam ...
A zkusil jste to pomoci jQuery nebo jineho JS frameworku?
Zvysok kodu je uz len ten php skript, ktory je tam volany. A to nie je nic ine nez vyber z databazy a jeho ulozenie do stringu.

Kód: [Vybrat]
<?php

if (!function_exists('add_action')) {
$wp_root '../../..';
if (file_exists($wp_root.'/wp-load.php')) {
require_once($wp_root.'/wp-load.php');
} else {
require_once($wp_root.'/wp-config.php');
}
}

global 
$wpdb;

$output "<option value=\"0\"> - prvy - </option>";

$table_name $wpdb->prefix.'kategorie';
$results $wpdb->get_results('SELECT * FROM '.$table_name.' WHERE level = '.$_GET['level'].' AND FK_kategorie = '.$_GET['id'].'');
foreach(
$results as $row)
{
$output .= "<option value=\"".$row->ID_kategorie."\">".$row->nazov_kategorie."</option>";
}

$results $wpdb->get_results('SELECT * FROM '.$table_name.' WHERE level = '.$_GET['level'].' AND FK_kategorie = (SELECT FK_pribuznej_kategorie FROM '.$table_name.' WHERE ID_kategorie = '.$_GET['id'].')');
foreach(
$results as $row)
{
$output .= "<option value=\"".$row->ID_kategorie."\">".$row->nazov_kategorie."</option>";
}

echo 
$output;
?>


Cpt.Nemo

Re: XHTMLhttpRequest nefunguje v IE
« Odpověď #4 kdy: 31. 05. 2011, 15:38:46 »
Aha, mno problem bude asi v tom innerHTML ...
Zkuste se selectem a jeho option pracovat jako s objekty ... Fungujeto v pohodě ...
Jednoduchy příklad zde: http://www.javascriptkit.com/javatutors/selectcontent.shtml


Smokie

Re: XHTMLhttpRequest nefunguje v IE
« Odpověď #5 kdy: 31. 05. 2011, 16:08:41 »
Aha, mno problem bude asi v tom innerHTML ...
Zkuste se selectem a jeho option pracovat jako s objekty ... Fungujeto v pohodě ...
Jednoduchy příklad zde: http://www.javascriptkit.com/javatutors/selectcontent.shtml
Ďakujem za rady. Nakoniec som aj tento problém vyriešil cez jQuery.

Tu je celý kód funkcie:
Kód: [Vybrat]
<script type="text/javascript">
function showCatgLevel(str, element, level)
{
if (str=="")
  {
  document.getElementById(element).innerHTML="Fault";
  return;
  }
    var url = "skript.php?level="+level+"&id="+str;
    jQuery.get(url, {}, function(data) {callback(data, element);}, 'text');
}

function callback(data, element) {
  $('#'+element).html(data);
}
</script>