[js & xml]

Pagina: 1
Acties:

  • Spruit_elf
  • Registratie: Februari 2001
  • Laatst online: 05-05 22:13

Spruit_elf

Intentionally left blank

Topicstarter
ik ben bezig met een scriptje dat via xmlhttp een pagina opvraagt en de xml doorgeeft.
nu ben ik bezig om dat met oop te doen maar ik loop tegen een probleem aan, als ik namelijk in de functie de xmlhttp.responseXML in de var this.xml gooi dan is dat geen probleem, de alert (1) geeft keurig aan dat er een [objectXMLDocument] in zit.

vervolgens wil ik die gaan gebruiken, maar dan blijkt hij ineens leeg te zijn alert (2) geeft aan leeg, wat de waarde is die ik hem aan het begin geef is.

offtopic:
php voor de kleurtjes

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<html> 
    <head>
        <title>Javascript xmlHttp test?</title>
        <script type="text/javascript">
            function xmlhttp(surl,smeth,ssync) {
                var xmlhttp=false;
                var url=surl;
                var meth=smeth||"get";
                var sync=ssync||true;
                this.xml="leeg";
                this.text="leeg";
                /*@cc_on @*/
                /*@if (@_jscript_version >= 5)
                    // JScript gives us Conditional compilation, we can cope with old IE versions.
                    // and security blocked creation of the objects.
                    try {
                            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (e) {
                        try {
                            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (E) {
                            xmlhttp = false;
                        }
                    }
                @end @*/
                if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
                  xmlhttp = new XMLHttpRequest();
                }
                xmlhttp.open(meth,url,sync);
                xmlhttp.onreadystatechange=function() {
                    this.readyState = xmlhttp.readyState
                    if (xmlhttp.readyState==4) {
                        this.xml  = xmlhttp.responseXML;
                        this.text = xmlhttp.responseText;
                        alert("1"+this.xml);
                    }
                }
                xmlhttp.send(null);
            }
            
            function xmlreplace(curl){
                var content =  new xmlhttp(curl,"get",true);
                alert("2"+content.xml);
            }
 
        </script>
    </head>
    <body onload="xmlreplace('test.xml')">
        <h1 id="naam">Javascript xmlHttp test?</h1>
        <div id="content">test</div>
    </body>
</html>


wat doe ik fout? mijn kennis van javascript(helemaal OOP) is al niet erg groot en xmlhttp maakt het niet makkelijker
offtopic:
edit: bah topic titel vergeten moet zijn: Variable wordt niet doorgegeven

[ Voor 10% gewijzigd door Spruit_elf op 27-01-2005 17:57 ]

Those who danced were thought to be quite insane by those who could not hear the music.


  • Spruit_elf
  • Registratie: Februari 2001
  • Laatst online: 05-05 22:13

Spruit_elf

Intentionally left blank

Topicstarter
hmmm ik bedenk me nu net wat het probleem zou kunnen zijn, de request is async en vandaar die xmlhttp.onreadystatechange=function(), maar als het object gemaakt wordt en hij doorgaat naar de volgende regel dan is die waarschijnlijk nog neit klaar.

alleen heb ik geen idee hoe ik daar op kan wachten...

edit: als ik achter de bovenste alert nog een alert zet ,die content.xml laat zien dan krijg ik undefined als resultaat. klopt ook niet dus...

[ Voor 20% gewijzigd door Spruit_elf op 27-01-2005 18:04 ]

Those who danced were thought to be quite insane by those who could not hear the music.


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 25-02 11:17

Clay

cookie erbij?

ik bedenk me nu net wat het probleem zou kunnen zijn
Dat is het idd. Je kan erop laten wachten door het juist wel synchroon te doen. Als je dat niet wil is een andere oplossing om aan de new xmlhttp() een functie referentie mee te geven die aangeroepen wordt als de xml binnen is, b.v:

code:
1
2
3
4
5
var content = new xmlhttp(curl, "get", true, handleXMLDocument);

function handleXMLDocument(xmlDoc) {
   ...
}


in de onreadystate functie kan je dan gewoon die functie aanroepen en de xml er naartoe paasen, daar zit dan vanzelf je loadtijd tussen.

je xmlhttp() moet dan iets als dit zijn:
code:
1
2
3
4
5
6
7
8
9
10
function xmlhttp(surl, smeth, ssync, fhandle) {
    // *knip*
    xmlhttp.open(meth,url,sync);
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4) {
            fhandle(this.responseXML);
        }
    }
    xmlhttp.send(null);
}

[ Voor 22% gewijzigd door Clay op 27-01-2005 20:22 ]

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 15-05 12:23
Dit is wel een handig documentje: http://www.quirksmode.org/dom/importxml.html

  • Spruit_elf
  • Registratie: Februari 2001
  • Laatst online: 05-05 22:13

Spruit_elf

Intentionally left blank

Topicstarter
jah dat had ik idd al gelezen, het probleem is ook wel een beetje dat ik probeer en object te maken wat ik later kan hergebruiken, en alle voorbeelden die ik heb gezien inc deze voert die uit te voeren handerling uit op die onreadystatechange en het probleem is dat als ik dat ook doe dat ik dan voor elke keer dat ik hem wil gebruiken het script weer moet aanpassen, maar de manier van clay hierboven is eigenlijk best geniaal en maakt het idd mogelijk om het toch gescheiden te houden.

Those who danced were thought to be quite insane by those who could not hear the music.