Avatar billede kongfjong Nybegynder
15. marts 2007 - 12:20 Der er 27 kommentarer og
2 løsninger

Problem med .responseText i IE

Hej, jeg leger pt. med lidt ajax-småtterier, der skal opdatere en DIV, når jeg ændrer på valget i en select. Det virker perfekt i FF, men i IE kommer der en fejl: System error: -1072896658 :) Jeg har luret mig frem til, at problemet kommer, når jeg har hentet info asynkront, og den når til http.readyState == 4 og jeg så vil hente den info ud, jeg har fået via mit php-script.

Min select:
=================
<select id="main_pages" name="main_pages" onchange="showPageInfo(document.getElementById(this.id).selectedIndex)">

Min PHP kode:
=================
header("Content-type: text/html; charset='iso-8859-9'");

$id = intval($_GET['id']);

$sub_sql = "SELECT * FROM cms_sub_pages WHERE main_page_id = $id ORDER BY sort_id";
$sub_res = mysql_query($sub_sql);
$return_tekst = '';
$return_array = array();

if(mysql_num_rows($sub_res) > 0) {
    while($sub_row = mysql_fetch_array($sub_res))
    {
        $return_array[] = $sub_row['sub_page_name'].','.$sub_row[id];
    }
   
    $return_tekst = implode('-', $return_array);
   
    echo $return_tekst;
} else {
    echo "Ikke fundet nogen undersider";
}

Mit Ajax-script:
=================
function showPageInfo(sel_ind)
{
    //alert(document.getElementById('main_pages').options[sel_ind].value);
    if(sel_ind > 0) {
        http.open("GET", 'ajax/getmaininfo.php?id=' + document.getElementById('main_pages').options[sel_ind].value, true);
        http.onreadystatechange = showPageInfoEnd;
        http.send(null);
    }
}

function showPageInfoEnd() {
    //alert(http.readyState);
    if (http.readyState == 4 || http.readyState == 0) {
        var result = http.responseText;
        var res_arr = result.split('-');
        var antal_sub = res_arr[res_arr.length - 2];
       
        var o = document.getElementById("sub_menu");
        while (o.firstChild) o.removeChild(o.firstChild);  // Slet evt. script-tags i div'et
       
        var sub_menu_header = document.createElement('div');
        sub_menu_header.className = 'sub_menu_header';
        var header_tekst = document.createTextNode('De nuværende underpunkter til "' + res_arr[res_arr.length - 1] +'":');
        sub_menu_header.appendChild(header_tekst);
        document.getElementById('sub_menu').appendChild(sub_menu_header);
       
        var header_sep = document.createTextNode('--------------------------');
        document.getElementById('sub_menu').appendChild(header_sep);

        var sub_menu_content = document.createElement('div');
        sub_menu_content.className = 'sub_menu_content';

        for(i=0; i<res_arr.length - 2; i++)
        {
            var temp_output_elm = document.createElement('div');
            var temp_output = document.createTextNode(i + 1 + ') ' + res_arr[i]);
            temp_output_elm.appendChild(temp_output);
            document.getElementById('sub_menu').appendChild(temp_output_elm);
        }
       
        var o = document.getElementById("placering_tip");
        while (o.firstChild) o.removeChild(o.firstChild);  // Slet evt. script-tags i div'et
       
        start_antal = (res_arr[res_arr.length - 2] < 1) ? 0 : 1;

        var max_sider = document.createTextNode('(Fra ' + start_antal + '-' + res_arr[res_arr.length - 2] + '. Tomt felt = sidst i menu.)');
        document.getElementById('placering_tip').appendChild(max_sider);
       
        document.getElementById('antal_menupunkter').value = res_arr[res_arr.length - 2];
    }
}

Håber der er et klogt hoved der kan forklare mig hvad jeg gør galt:)
Avatar billede roenving Novice
15. marts 2007 - 12:25 #1
Kan du ikke prøve med et link ?-)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 12:25 #2
Hov kom til at smide det forkerte stykke php-kode med, her er det rigtige:

header("Content-type: text/html; charset='iso-8859-9'");

$id = htmlspecialchars($_GET['id']);

$name_sql = "SELECT main_page_name FROM cms_main_pages WHERE id = $id";
$name_res = mysql_fetch_array(mysql_query($name_sql));

$sub_sql = "SELECT * FROM cms_sub_pages WHERE main_page_id = $id ORDER BY sort_id";
$sub_res = mysql_query($sub_sql);

$antal_sub = mysql_num_rows($sub_res);

$text = '';

while($row = mysql_fetch_array($sub_res))
{
    $text .= $row['sub_page_name'].'-';
}

$text .= $antal_sub.'-';
$text .= $name_res['main_page_name'];

echo $text;
Avatar billede kongfjong Nybegynder
15. marts 2007 - 12:26 #3
Avatar billede roenving Novice
15. marts 2007 - 12:30 #4
Hvor er linje 72 (cirka ?-)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 12:35 #5
I hvilken fil?
Avatar billede roenving Novice
15. marts 2007 - 12:47 #6
Tjah, den fil der melder fejlen ?-)

-- og hvad er det for en kode, der starter med

  /*@cc_on

  @if (@_jscript_version >= 5)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 12:55 #7
Tja, den fil der bliver beskrevet til at indeholde fejlen i IE, index.php?action=opret_sub, har ikke en linje 72:) Javascript filen har, og det er det stykke her:     

for(i=0; i<res_arr.length - 2; i++)

Mht. hvad det er for en kode, så tør jeg faktisk ikke sige det. Det er noget jeg har fundet et sted, men som jeg ikke ved præcist hva det gør, andet end funktionen getHTTPObject() skaber http objektet, men det er måske der fejlen ligger?
Avatar billede roenving Novice
15. marts 2007 - 12:58 #8
Prøv den, jeg er stødt ind i:

function getXmlHttpObject() {
  try{
    xmlHttp = new XMLHttpRequest();
  }catch(e){
    try{
      xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
      xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}
Avatar billede kongfjong Nybegynder
15. marts 2007 - 13:05 #9
Det hjalp desværre ikke... prøvede at tilføje alert(xmlHttp) lige før den bliver returneret, og i IE kommer der bare '[object]' mens den i firefox kommer med '[object XMLHttpRequest]'
Avatar billede roenving Novice
15. marts 2007 - 13:10 #10
Jeg er tyndt ude, men måske lige prøve:

var temp_output = document.createTextNode( (i + 1) + ') ' + res_arr[i]);
Avatar billede kongfjong Nybegynder
15. marts 2007 - 13:12 #11
Hvor skal jeg smide den?:)
Avatar billede erikjacobsen Ekspert
15. marts 2007 - 13:17 #12
Skal du have state 0 med? Kan det ikke tænkes du skal nøjes med

  if (http.readyState == 4) {
Avatar billede kongfjong Nybegynder
15. marts 2007 - 13:28 #13
Det hjalp ikke erik... Har selv fundet en løsning dog, men som bare ikke forklarer hvorfor responseText ikke vil virke: responseXML og så få php-scriptet til at danne XML:)

Det giver i det mindste ikke den fejl, men nu består mit problem så blot i, at få den til at læse det XML dokument, hvilket jeg ikke helt kan få den til...
Avatar billede roenving Novice
15. marts 2007 - 13:35 #14
responseDoc.getElementsByTagName ?-)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 13:43 #15
Præcis, men det virker ikke helt

Har dette xml output: http://martin.wi8.ots.dk/WebIntegrator/cms/ajax/getmaininfo.php?id=1

Og dette java script:
var result = http.responseXML;
        var dom_root = result.getElementsByTagName('sider');
        alert(dom_root);

Den alert her [object HTMLCollection], kan det passe? For når jeg prøver at alert(dom_root.length), siger den 1, men prøver jeg alert(dom_root.hasChildNodes()), melder den fejl:)
Avatar billede roenving Novice
15. marts 2007 - 13:49 #16
Hvorfor ikke:

res = result.getElementsByTagName("undersider");
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:00 #17
Tja hvis jeg så prøver

var dom_root = result.getElementsByTagName("undersider")[0].firstChild.nodeValue;
        alert(dom_root);

får jeg bare en fejl om, at

result.getElementsByTagName("undersider")[0] has nu properties....
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:08 #18
hmmm noget tyder på, at den kun for <hovedsider> med i xml-dokumentet. I hvert fald hvis man lige kører en gang

alert(new XMLSerializer().serializeToString(result));


Kører man

alert(result.parseError.reason);
alert(result.documentElement);


I IE, meldes der heller ikke om fejl...
Avatar billede roenving Novice
15. marts 2007 - 14:10 #19
Når jeg ser xml-dokumentet indledes det med en bindestreg:

- <sider>

-- det er vel en fejl ?-)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:10 #20
Ja okay, hvis man kører alert(new XMLSerializer().serializeToString(result)); på punktet forum i selecten, viser den ganske rigtigt alle elementer, men den menr stadig kun der er et elm i <sider>:S
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:11 #21
Det er IE der laver sådan en lille ting hvor man kan "åbne og lukke" træet:)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:11 #22
og sjovt nok også FF:)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:18 #23
Hmmm så kom det sgu pludseligt. Sikkert mig der har lavet en tastefejl af en art:) Tak for hjælpen begge to. Lig svar så er der point til deling:)
Avatar billede erikjacobsen Ekspert
15. marts 2007 - 14:21 #24
Ingen point til mig, tak.
Avatar billede roenving Novice
15. marts 2007 - 14:27 #25
Så behold du selv langt de fleste af dine point !-)

-- at være sparringspartner i din problemløsning er zq ikke til hverken 100 eller 200 point ...

-- els velbekomme '-)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:33 #26
He okay, svar 1:D
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:33 #27
Argh svar 1:)
Avatar billede kongfjong Nybegynder
15. marts 2007 - 14:34 #28
sådan;)
Avatar billede roenving Novice
15. marts 2007 - 14:37 #29
-- og tak for point ;~}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester