[JQ & XML]Ajax request opslaan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Beste tweakers, ik heb een vraagje m.b.t. AJAX en jQuery,

Ik heb een xml documentje wat ik uit lees. Dit lukt best met de volgende code:
code:
1
2
3
4
5
6
7
8
9
$.ajax({
            type: "GET",
            async: false,
            url: "xml/slideOptions.xml",
            dataType: "xml",
            success: function(xml) { 
// parse
    }
        });


Echter wil ik niet om de haver klap een vertraagende ajax request uit willen voeren. Er veranderd niets, hij word alleen uitgelezen. Ik wil dus het volgende:

- Page load -> Ajax Call naar de XML -> on success opslaan in een variable (ik gebruik de data functie van jquery)
- Vervolgens ten alle tijde wil ik die data weer uit kunnen lezen zonder opnieuwe een call te hoeven doen.

Dit bovenstaande lukt best, alleen dan moet ik met javascript XML gaan werken. Het uitlezen kan met ajax alleen vervolgens slaat hij een XML Object op. Die kan ik met jquery niet uit lezen. de volgend code levert mij een undefined error op:

code:
1
2
var slides = $("body").data("xml");
    alert(slides.find("pages").text());

Waarbij de $("body").data("xml") de variable is waarin de XML opgeslagen is (indien je niet bekend bent met data ff googlen, is verrekte handig)

Echter de volgende code lukt wel maar is super slecht leesbaar:
code:
1
2
3
4
var slides = $("body").data("xml");
        var x = slides.getElementsByTagName("slide")[index];
var uitkomst = x.getElementsByTagName("pages")[0].childNodes[0].nodeValue;
alert(uitkomst);

Dan krijg ik precies de uitkomst te zien.
Echter is dat niet echt goed leesbaar.

Weet iemand mij verder te helpen?
B.v.d,

Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
LAAT MAAR,

is al klaar ik was weer eens achterlijk.

Ik waas in de alert natuurlijk de $() vergeten, die benodigd is om de DOM door te waggelen, stom >.<.
na goed is al klaar dit werkt wel
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function ajaxCall(){
        
        $.ajax({
            type: "GET",
            async: false,
            url: "xml/slideOptions.xml",
            dataType: "xml",
            success: function(xml){
                $("body").data("xml",xml);  
            }
        }); 
        
    }
    ajaxCall();

var tester = $("body").data("xml");
    alert($(tester).find("pages").text());

Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 21:52
hoezo gebruik je nog getelementsbytagname met jQuery? :)

Acties:
  • 0 Henk 'm!

Verwijderd

Mag ik overigens vragen waarom je async op false hebt staan? Is de Ajax request een dusdanige actie dat je niet wilt dat de user verder kan gaan voordat de Ajax actie is afgelopen?

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Als je de AJAX call vertragend vindt werken, waarom voer je hem dan synchroon uit?
Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.
Niet dat je request asynchroon sneller gaat, maar je merkt het wellicht wel minder op je pagina.

/edit: spuit 11

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45

Bosmonster

*zucht*

Daarnaast, als je met javascript werkt is json wel een voorkeursformaat. Minder overhead en makkerlijker te manipuleren (en ook op te slaan, zonder zware XML-parsings). Daarnaast kun je het eenvoudig aanpassen als je crossdomain wilt toestaan.

Er is eigenlijk geen reden om XML te gebruiken, tenzij je geen invloed hebt op wat er aangeleverd wordt (bijvoorbeeld als je de XML al ergens anders gebruikt in de backend oid).

[ Voor 43% gewijzigd door Bosmonster op 10-01-2011 13:50 ]


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
@bosmonster: dat is dus wel het geval :)
@scyn / a-sync: Als ik dat niet deed werden mijn andere functies uitgevoerd voordat mijn request klaar was, ik ben afhankelijk van de request, vandaar.

@catch: daar wou ik dus vanaf maar goed het is al gelukt dus :)

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45

Bosmonster

*zucht*

BryanD schreef op maandag 10 januari 2011 @ 14:02:
@scyn / a-sync: Als ik dat niet deed werden mijn andere functies uitgevoerd voordat mijn request klaar was, ik ben afhankelijk van de request, vandaar.
Daar heb je dus die succes-functie voor :P

Kun je daar de rest van je calls afhandelen die afhankelijk zijn van je xhr-request.

Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
er zijn een stuk of 6 functies die daarna uitgevoerd worden inclusief functies die een loop beginnen

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45

Bosmonster

*zucht*

BryanD schreef op maandag 10 januari 2011 @ 14:41:
er zijn een stuk of 6 functies die daarna uitgevoerd worden inclusief functies die een loop beginnen
Dus?

Als het het asynchroon doet handel je de rest af als je klaar bent (daar hebben ze die dingen die events heten voor uitgevonden), maar heb je de optie andere taken wel gelijktijdig te doen die die data niet nodig hebben.

Nu heb je geen andere optie, maar wacht alles op je call. Zo programmeerden we 30 jaar geleden in Basic, met GO TO's enzo.
Pagina: 1