[jQuery] Bij page refresh ajax call afbreken *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • T i M
  • Registratie: April 2004
  • Laatst online: 07:02
Ik heb een systeem gebouwd wat gebruik maakt van een API om de status van verschillenden apparaten op te halen. Na het inloggen kom je als eerste op de statuspagina. De status wordt opgehaald via een asynchrone AJAX call, zodat de gebruiker geen last heeft van het laden.

Het probleem! Het kan voorkomen dat er bepaalde services niet draaien of de API is tijdelijk niet beschikbaar (downtime) waardoor de status niet opgevraagd kan worden. Als dat het geval is dan duurt het 60 seconden voordat ik melding krijg dat er iets niet bereikbaar is. Nu is dat geen probleem, als ik na 15 seconden nog geen antwoord heb dan krijg de gebruiker al een melding te zien dat ie het later nog eens moet proberen.

Als de gebruiker de pagina wilt verversen en de AJAX call is nog actief dan blijft de pagina laden totdat de call afgerond is. Ik maak gebruik van jquery en wilde het op onderstaande manier oplossen:

JavaScript:
1
2
3
4
5
6
7
8
9
10
var x= null;

window.onunload = function() {
    // een hoop checks
    x.abort();
}

var x = $.ajax({
//code
});


De ajax functie van jquery zou volgens de documentatie een xmlHTTP object terug moeten geven. En die bevat weer een abort() functie om de boel af te breken. Helaas werkt mijn oplossing niet en blijft de pagina laden tot de AJAX call voltooid is.

Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 27-08 14:18

pieturp

gaffa!

Wat heeft PHP hier mee te maken? Zet liever jQuery in je topictitel ;)

Maak je wel gebruik van een Asynchrone call? Ik meen me te herinneren dat je ook synchrone calls met jQuery kunt maken, even geen zin om 't op te zoeken.
Normaal gesproken hoef je niet je call te onderbreken met een window.onunload event; dat doet de browser wel voor je. Ik kan helaas met de code die je post niet zo veel. Kun je i.i.g. even dat deel van je script dat de call maakt posten?

... en etcetera en zo


Acties:
  • 0 Henk 'm!

  • T i M
  • Registratie: April 2004
  • Laatst online: 07:02
JavaScript:
1
2
3
4
5
6
7
8
ajax = $.ajax({
    type: "POST",
    url: href,
                async: true,
    success:  function(data, status) {
        // code
          }
}); 
]

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Waarom gebruik je uberhaupt de ajax-method. Dat is namelijk een lowlevel-functionaliteit die je alleen dient te gebruiken als je weet waar je mee bezig bent. Gebruik liever de hoger liggende wrappers (post, get, getjson, etc).

Als je dan al perse de lowlevel methods wilt gebruiken, lees je dan eerst fatsoenlijk in in de mogelijkheden (zoals sync/async):

http://docs.jquery.com/Ajax/jQuery.ajax#options

[ Voor 28% gewijzigd door Bosmonster op 13-01-2010 10:13 ]