Fórum Root.cz
Hlavní témata => Software => Téma založeno: Smokie 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:
<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
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.
-
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?
-
Ano, nakoniec som to skúsil s jQuery a dostal som kód, ktory funguje.
<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...
-
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.
<?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;
?>
-
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 (http://www.javascriptkit.com/javatutors/selectcontent.shtml)
-
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 (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:
<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>