Toon posts:

xml inladen mbv post request

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik wil graag een xml document inladen en parsen dmv javascript. Nu is dat niet zo'n probleem met het xmldom object (en daar de load method van).

Maar m'n xml is dynamisch en wordt gegenereerd door php en die php wil het een en ander aan data gePOST hebben.

dat ik het via een GET binnen kan halen snap ik wel. En dat het eventueel ook zou kunnen door een form te submitten naar een hidden iFrame en daarvan de innerHTML in de loadXML method gooien ook, maar dat vind ik niet zo netjes.

Hoe krijg ik dit voor elkaar?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

volgens mij is het wel mogelijk dmv XMLHTTP een post request te sturen en vervolgens de reply weer binnen te halen in een XMLDOMDocument object die je kan parsen; dit heb ik zelf nog nooit geprobeerd, maar ik weet bijna zeker dat het kan :)

Intentionally left blank


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 21-08 17:05
Ik weet niet om hoeveel data het gaat maar het lijkt me toch dat de GET methode hier wel voldoet.
Als de reden is dat je niet weet hoe je het php script moet ombouwen van POST naar GET handling zet dan boven in je phpscript $_POST=$_GET (Jaja, dit is echt lomp...) Of heb je geen toegang tot het script?

Verwijderd

Topicstarter
gedeeltelijk voor elkaar:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// eigenlijk stiekum js, maar de kleurtjes van php zijn mooier
// wanneer komt er een highlighter voor js?

function putMsg() {
    if (xmlhttp.readyState==4) {
        field = document.getElementById('mercuryMailfield');
        myxml = new ActiveXObject("Microsoft.XMLDOM"); 
        myxml.loadXML(xmlhttp.responseText);
        var subjecttxt = '<h1>'+myxml.documentElement.selectNodes('msg/subject')[0].text;
        subjecttxt += ' - '+myxml.documentElement.selectNodes('msg/sender')[0].text+'</h1>';
        var bodytxt = myxml.documentElement.selectNodes('msg/body')[0].text;
        bodytxt = '<p>'+bodytxt.replace(/\n/gi,'<br />')+'</p>';
        field.innerHTML = subjecttxt + bodytxt;
    }
}

function getMsg(msgId) {
    document.getElementById('mercuryMailfield').innerHTML = 'Receiving mail...';
    xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP"); 
    xmlhttp.onreadystatechange = putMsg;
    xmlhttp.Open('POST', 'mercurydeamon.asp?msgId='+msgId, true); 
    xmlhttp.Send('msgId='+msgId); 
}

ik heb alleen 2 probleempjes:
• de POST lukt niet, als ik als method GET opgeef en de variabelen in de URL mik doet ie het wel, ik heb nog niet kunnen vinden hoe dit netjes moet met POST
• op de een of andere manier kan ik niks met het responseXML object van de XMLhttp. Daarom laadt ik de responseText maar in in een xmldom, maar dit zou volgens mij ook direct moeten kunnen.

trouwens, ik wil via een POST werken omdat je anders de deamon direct zou kunnen aanspreken met de informatie die je wilt en ik wil geen passwords e.d. via een GET doen

[ Voor 26% gewijzigd door Verwijderd op 28-08-2003 08:42 . Reden: layout ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:21

crisp

Devver

Pixelated

volgens mij is het zoiets:

JavaScript:
1
2
3
4
5
6
7
8
9
xmlhttp = new ActiveXObject ("Microsoft.XMLHTTP");
xmlhttp.Open('POST', 'http://www.blabla.com/mercurydeamon.asp', false);
xmlhttp.setRequestHeader('Content-Type','text/html');

var postdata='msgId='+escape(msgId);

xmlhttp.Send(postdata);

xmlDoc = xmlhttp.responseXML;


even synchroon gedaan, maar asynchroon met een functie voor onreadystatechange kan natuurlijk ook ;)

nb, als je XML terug wilt krijgen, zorg dan ook dat de applicatie de juiste contentheader meestuurt.

handige link: http://webfx.eae.net/dhtml/xmlextras/xmlextras.html

[ Voor 18% gewijzigd door crisp op 28-08-2003 09:12 ]

Intentionally left blank


Verwijderd

Topicstarter
dat was 'm bijna. Het zat idd in de header:

xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

de header van de asp staat uiteraard al lang goed :P

ow en die link is bijzonder nuttig. Ik had niet eens de droom om het crossbrowser werkend te krijgen, maar dat ga ik nu zeker wel effe proberen

[ Voor 35% gewijzigd door Verwijderd op 28-08-2003 19:38 ]

Pagina: 1