Toon posts:

javascript response van meerdere ajax calls

Pagina: 1
Acties:

Vraag


  • marnix1977
  • Registratie: Januari 2006
  • Laatst online: 05-02 17:58
Ik heb een webpagina die via een knop een stukje javascript afvuurt. Bij het starten wijzigt de tekst van de button en als het request klaar is wordt de tekst weer gewijzigd. Nu heb ik 5 lossen knoppen en als ik nu per knop het script afvuur dan werkt het gewoon. Tevens heb ik een div die ik als statusbox fungeert en dat werkt ook.

Ik heb ook een knop die die dat voor alle 5 tegelijk doet, Echter dan wordt de eerste wijziging van de knop wel doorgevoerd, echter het stukje dat als de request klaar is wordt dan niet uitgevoerd. De knop wordt dat niet meer gewijzigd. Echter krijg ik die tekst wel gewoon netjes in het status div.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
for (groupnr = 1; groupnr <= groupCount; groupnr++) {
      alert(groupnr)
      $("#gr"+groupnr).text('Bezig met aanmaken...');
 
      jQuery.ajax({
         url: "/groups/addgroup",
         method: 'post',       
         data: {
            groupnr : groupnr,
            newadminpass : $("#newadminpass").val()
         },
         success: function(result){
           switch(result.mtype) {
            case 'error':
              // code 
              $("#gr"+groupnr).html('<span class="text-danger">'+result.message+'</span><br/>');
              $("#statusbar").append('<span class="text-danger">'+result.message+'</span><br/>');
              
            break;
            case 'success':
              // code block
              
              $("#gr"+groupnr).html('<span class="text-success">'+result.message+'</span><br/>');
              $("#statusbar").append('<span class="text-success">'+result.message+'</span><br/>');
            break;
            default:
              $("#gr"+groupnr).html('<span class="text-success">'+result.message+'</span><br/>');
              $("#statusbar").append('<span class="text-success">'+result.message+'</span><br/>');
              // code block
          }
         },
         fail: function(xhr, status, error) {
              var errorMessage = xhr.status + ': ' + xhr.statusText
              toastr.error(errorMessage);
              $( "#gr"+groupnr).html('<span class="text-danger">1. '+error+"</span><br/>");
         },
         error: function(xhr, status, error) {
          var errorMessage = xhr.status + ' ' + xhr.statusText
          toastr.error(errorMessage);
          $( "#gr"+groupnr).html('<span class="text-danger">Request '+errorMessage+"</span><br/>");
     },
  });        

      }

Alle reacties


  • Jaaap
  • Registratie: Februari 2000
  • Niet online
Kijk eens wat groupnr doet tussen de tijd dat alle 5 request zijn afgevuurd en de ajax responses nog niet binnen zijn (hint: die is 4)

Dat betekent
Het gebeurt
Dit verandert
Wat bepaalt


  • Castor385
  • Registratie: Mei 2005
  • Nu online
Het probleem hier is dat tijdens het uitvoeren van de loop je groupnr ophoogt, maar omdat al je requests async zijn is bij alle responses groupnr gelijk aan de laatste van de loop

Probeer eens zoiets:
code:
1
2
3
4
5
6
7
for (var i .....) {
  (function (i) {
    asynchronousFunction(function() {
      use(i);
    });
  })(i);
}

[Voor 30% gewijzigd door Castor385 op 29-01-2021 21:47]

Study everything, You'll find something you can use


  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Wat gebeurt er als je gewoon window.fetch() gebruikt ipv de oude jQuery.ajax?

Maak je niet druk, dat doet de compressor maar


  • marnix1977
  • Registratie: Januari 2006
  • Laatst online: 05-02 17:58
Bedankt voor alle info. Had verwacht dat de i value voor het request behouden bleef, maar dat is dus helaas niet zo.

fetch kan volgens mij niet. Als ik het goed lees neemt die de cookies niet mee en dan kom ik niet door de authenticatie heen.

Maar nu ik weet dat die i value al hoger is dan wanneer de request klaar is, heb ik het anders opgelost. Heb het nu opgelost door in de json return het groupnr mee te nemen, dan kan ik die daar uithalen en dat werkt het wel.

Bedankt voor de info.

  • Mr. HTTP
  • Registratie: November 2020
  • Laatst online: 09-03-2022
marnix1977 schreef op zaterdag 30 januari 2021 @ 10:18:
fetch kan volgens mij niet. Als ik het goed lees neemt die de cookies niet mee en dan kom ik niet door de authenticatie heen.
Spec

Update:
Fetch: Differences from jQuery

code:
1
2
3
fetch(url, {
  credentials: "same-origin"
}).then(...).catch(...);


Tutorial
Promise.all() and Promise.race()
Promise.all([promises]) method takes an array of promises and returns a new promise. This promise will be fulfilled when and if all promises are fulfilled. Promise.race([promises]) also takes an array of promises and returns a new promise which fulfils if any of the promises fulfils.

[Voor 67% gewijzigd door Mr. HTTP op 30-01-2021 12:17]

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee