[JS/AJAX] 2e http request alleen na een alert?!

Pagina: 1
Acties:

  • m33p
  • Registratie: September 2002
  • Laatst online: 11:27
Hoi, ik ben bezig met een pagina om een factuur te bouwen.

Wat ik nu doe:

Men klikt op toevoegen (roept een JS functie aan) en de volgende stappen gebeuren:

1. Doe een request d.m.v. de AJAX techniek om product toe te voegen aan database
2. Herstel de velden waarin men het product kon kiezen.
3. Doe een request d.m.v. de AJAX techniek om de productlijst op te vragen uit de DB en deze weer te geven in een layer

Als ik nou tussen punt 2 en 3 een alert doe (een alert("test") will do the trick) werkt het helemaal perfect. Haal ik deze weg dan werkt het gewoon niet?

Dit is de code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
http.open("GET", 'modules/boekhouding/scripts/addProduct.php?pid=' + escape(productID) + '&aan=' + escape(product_aantal) + '&oms=' + escape(product_omschrijving) + '&pri=' + escape(product_prijs) + '&btw=' + escape(product_btwpercentage), true);
http.send(null);
            
document.getElementById('product_aantal').selectedIndex = 0;
document.getElementById('productID').selectedIndex = 0;
document.getElementById('product_omschrijving').value = "";
document.getElementById('product_prijs').value = "";
document.getElementById('product_btwpercentage').selectedIndex = 0;
document.getElementById('periodiek').selectedIndex = 2;
document.getElementById('periodiek_periode').selectedIndex = 0;
            
alert("test");
            
http.open("GET", 'modules/boekhouding/scripts/getFactuurProducten.php', true);
http.onreadystatechange = handleHttpResponse;
http.send(null);


Enig idee wat het probleem kan zijn? Een setTimeout werkt hier ook niet, en zoveel verstand van JS heb ik helaas niet.

Alvast bedankt!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Ik vermoed dat het antwoord nog binnenkomt, en dat je dan al een tweede request maakt :) SetTimeout zou ook moeten werken, hoe gebruikte je die? De alert() zorgt er voor dat de executie even stopt, zodat de eerste request wel genoeg tijd krijgt.

Netjes wachten tot de eerste request klaar is, of een tweede openen, of een synchrone request van maken door false mee te geven als derde argument ipv true, dan word gewacht tot er een antwoord is...

[ Voor 112% gewijzigd door user109731 op 09-11-2006 17:39 ]


  • m33p
  • Registratie: September 2002
  • Laatst online: 11:27
Gewoon asynchroon van maken is de beste oplossing hier lijkt mij. Sowieso mooier aangezien ik dan zeker weet dat het product al in de DB zit voordat ik de nieuwe lijst ophaal.

Ik wist niet dat het 3e argument stond voor synchroon/asynchroon en hiermee werkt het nu, bedankt!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ik denk dat het antwoord van Grote prutser de oplossing is.

Je zou misschien kunnen checken of de opdracht is uitgevoerd. Zoiets denk ik
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
http.open("GET", URL, true);
httpObject.onreadystatechange=function() {
if (xmlhttpObject.readyState==4) { // Nu zijn alle gegevens binnen
 document.getElementById('product_aantal').selectedIndex = 0; 
 document.getElementById('productID').selectedIndex = 0; 
 document.getElementById('product_omschrijving').value = ""; 
 document.getElementById('product_prijs').value = ""; 
 document.getElementById('product_btwpercentage').selectedIndex = 0; 
 document.getElementById('periodiek').selectedIndex = 2; 
 document.getElementById('periodiek_periode').selectedIndex = 0; 
 // tweede reruest
 http.open("GET", 'modules/boekhouding/scripts/getFactuurProducten.php', true); 
 http.onreadystatechange = handleHttpResponse; 
 http.send(null);
}
// daadwerkelijke request sturen
httpObject.send(null);

Het is maar een optie. Ik weet niet of hij zo helemaal goed is. Je moet maar even kijken.
Ik heb eerst heel veel problemen gehad met het cachen van de browser. Dus wat ik altijd voor de zekerheid doe is de datum en tijd meegeven als extra $_GET variabele

Jochemmol