[xml/ajax] xml terugsturen naar de server

Pagina: 1
Acties:

  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 23-01 19:11
Ik ben (zoals velen hier) ook met ajax aan het klieren. Gaat allemaal erg leuk. Maar loop ik tegen iets aan. Ik krijg netjes een xml bestandje van mijn server, kan het netjes verwerken en zo allemaal geen probleem. Maar nu wil ik dat xml bestand word terug gestuurd naar de server.

Nu heb ik even zitten zoeken, maar ik vind het niet echt een goede oplossing voor.. iemand ideeën?

Verwijderd

Je kunt alleen tekst versturen, niet een DOM object. Je zult dus volgens mij de XML moeten converteren naar tekst en dat versturen als POST data met je XMLHttpRequest. Je zou dan eventueel de content-type op text/xml kunnen zetten met een HTTP request header.

  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 23-01 19:11
Daar kom ik dus net achter.. Ik kom er ook achter dat er in Mozilla een XMLSerializer zit. Deze parst een xml object gewoon in de tekst zoals je het xml document ook zou zien in een editor. Maar is zoiets er ook in IE?

Verwijderd

IE heeft de document.xml property

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op vrijdag 07 april 2006 @ 11:22:
Je kunt alleen tekst versturen, niet een DOM object.
O?

JavaScript:
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
var xmlDoc;
var xml;
if(document.implementation.createDocument) {
    xmlDoc = document.implementation.createDocument("", "erkens", null);
    xml = xmlDoc.documentElement;
} else {
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    var root = xmlDoc.createDocumentFragment();
    xml = xmlDoc.createElement("erkens");
    root.appendChild(this.xml);
    xmlDoc.appendChild(root);
}
// voeg hier via dom nu je eigen meuk aan toe...

var request = false;
    
if (window.XMLHttpRequest) {
    request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
    var ActiveXimpl = ["Microsoft.XMLHTTP", "Msxml2.XMLHTTP"];
    
    for(var i = 0; i < ActiveXimpl.length; i++)     {
        try {
            request = new ActiveXObject(ActiveXimpl[i]);
        } catch(e) { }
    }
}
if (request){
    request.open("POST http://hier.je.server/path/", true);
    request.send(xmlDoc);
}

[ Voor 6% gewijzigd door Erkens op 07-04-2006 11:52 . Reden: paar kleine copy/paste foutjes ]


  • mace
  • Registratie: Juni 2003
  • Laatst online: 22-02 22:33

mace

Sapere Aude

edit: genoeg gelachen

[ Voor 97% gewijzigd door mace op 07-04-2006 11:43 ]


  • b19a
  • Registratie: September 2002
  • Niet online
Ai dat is een lastige, persoonlijk zou ik me er niet al te druk over maken. IE ondersteunt bijna niks, laat die maar gewoon tekst opsturen naar je server, dan weet je in ieder geval zeker dat het werkt.
Erkens heeft me overtroffen :+
Tis vrijdag...

[ Voor 13% gewijzigd door b19a op 07-04-2006 11:43 ]


  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 23-01 19:11
code:
1
2
3
4
5
6
7
8
9
10
11
12
function fnXMLSerializer(xmlObject) 
{
    if(bBrowserIsInternetExplorer)
    {
        return xmlObject.xml;
    }
    else 
    {
        var serializer = new XMLSerializer();
        return serializer.serializeToString(xmlObject);
    }
}


Dit is genoeg, bBrowserIsInternetExplorer word al eerder bepaalde om een xmlHttpRequest object te verkrijgen

[ Voor 4% gewijzigd door martijnvanegdom op 07-04-2006 11:44 ]


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Martijnvanegdom schreef op vrijdag 07 april 2006 @ 11:44:
Dit is genoeg, bBrowserIsInternetExplorer word al eerder bepaalde om een xmlHttpRequest object te verkrijgen
Dat is nooit een goede manier om te kijken of je IE gebruikt. Het beste kan je gewoon checken of de functies die je aanroept bestaan. Op die manier weet je (bijna) zeker dat de code in de toekomst ook gewoon werkt. Zoals bijvoorbeeld met IE7 die eindelijk ook xmlHttpRequest ondersteund :)

Verwijderd

OK, dat wist ik niet, maar volgens mij wordt xmlDoc wel geserialiseerd naar een string voor het wordt verstuurd. Uiteindelijk blijft het HTTP, er wordt niet een een of ander binair object verstuurd, toch?

http://www.w3.org/TR/2006...equest-20060405/#dfn-send
If the data is a Document, then the document MUST be serialised using the encoding given by data.xmlEncoding, if specified, or UTF-8 otherwise [DOM3]. If data is not a Document or a DOMString the host language MUST use the stringification mechanisms on the argument that was passed.

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op vrijdag 07 april 2006 @ 11:59:
[...]

OK, dat wist ik niet, maar volgens mij wordt xmlDoc wel geserialiseerd naar een string voor het wordt verstuurd. Uiteindelijk blijft het HTTP, er wordt niet een een of ander binair object verstuurd, toch?
Het wordt natuurlijk XML ;)

Wat overigens met PHP bijvoorbeeld als volgt uit te lezen is:
PHP:
1
2
3
4
5
6
7
$xml = "";
$putData = fopen("php://input", "r");

while($block = fread($putData, 1024)) {
    $xml .= $block;
}
fclose($putData);

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Erkens schreef op vrijdag 07 april 2006 @ 11:54:
[...]

Dat is nooit een goede manier om te kijken of je IE gebruikt. Het beste kan je gewoon checken of de functies die je aanroept bestaan. Op die manier weet je (bijna) zeker dat de code in de toekomst ook gewoon werkt. Zoals bijvoorbeeld met IE7 die eindelijk ook xmlHttpRequest ondersteund :)
Inderdaad. De mooiste manier is natuurlijk om XMLSerializer gewoon te implementeren voor die browsers die het niet native ondersteunen:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (!window.XMLSerializer)
{
    window.XMLSerializer = function() {}
    XMLSerializer.prototype.serializeToString = function(xmlObject)
    {
        if (xmlObject.xml)
        {
            return xmlObject.xml;
        }
        else
        {
            // whatever
        }
    }
}

Intentionally left blank

Pagina: 1