[AJAX] Terug komende verzoeken worden genegeerd?

Pagina: 1
Acties:

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 01-12 19:36
Vanuit een simpel voorbeel Ajax script ben ik gaan testen en bouwen.
Waar ik nu tegen aan loop is, dat terug komende reacties van de server niet worden opgepakt wanneer er meerdere verzoeken tergelijk gestuurd worden (Met wireshark is te zien dat de server alles ontvangt en op alles reageert) Op momenten kunnen er wel 5 tot 10 verzoeken lopen naast elkaar.

Wat ik van het principe van AJAX begrepen heb, is dat het niet uitmaakt hoe langzaam je een reactie terug dat deze toch wel verwerkt door je AJAX scripts zou worden.

Waaraan zou dit kunnen liggen?

Als je op http://www.clearnova.com/ajax/ onder 'Track changes' de waardes van het formulier als een idioot in vult (letter-tab-letter-tab-letter-tab zo vlug mogelijk) zul je zien dat enkel op het laatste gereageerd word.

[ Voor 16% gewijzigd door Keiichi op 23-01-2007 14:17 ]

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Slechte scripts?

Als het goed is moet je gewoon veel verzoeken kunnen afhandelen. Een verzoek is voor een webserver hetzelfde als een normale web pagina openen, alleen in een ander jasje.

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Heb je een stukje code waar het precies misgaat? :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Gebruik je misschien steeds hetzelfde object?

Dan overschrijf je (volgens mij) namelijk bij elk nieuw verzoek het 'onreadystatechange' event.
Daar heb ik ook wel eens last mee gehad. ;)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 01-12 19:36
BtM909 schreef op dinsdag 23 januari 2007 @ 14:16:
Heb je een stukje code waar het precies misgaat? :)
Ik heb m'n OP geupdate met iets wat je kunt doen om het te repliceren (niet mijn script overigens)

[ Voor 5% gewijzigd door Keiichi op 23-01-2007 14:18 ]

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

Keiichi schreef op dinsdag 23 januari 2007 @ 14:14:
Als je op http://www.clearnova.com/ajax/ onder 'Track changes' de waardes van het formulier als een idioot in vult (letter-tab-letter-tab-letter-tab zo vlug mogelijk) zul je zien dat enkel op het laatste gereageerd word.
Waarschijnlijk (her)gebruik je elke keer je XMLHttpRequest instance. Sowieso kan een browser default maar 2 simultane connecties maken naar dezelfde server.
Twee oplossingen: gebruik maken van een queue zodat er nooit meer dan 2 ajax-requests tegelijkertijd gedaan kunnen worden, of gewoon zorgen dat je niet elke keer weer een nutteloos nieuw request maakt (afmaken waar je mee bezig bent en daarna pas weer kijken of er nog een request noodzakelijk is).
Vanuit performance oogpunt is de tweede optie meestal het meest wenselijk, je bent nu feitelijk gewoon je eigen server aan het DOSsen.

Overigens: waarom gebruik je links voor behavioral zaken en misbruik je daarbij het href attribuut met het javascript: pseudo-protocol ipv netjes een event-handler?

Intentionally left blank


  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 01-12 19:36
crisp schreef op dinsdag 23 januari 2007 @ 14:28:
[...]

Waarschijnlijk (her)gebruik je elke keer je XMLHttpRequest instance. Sowieso kan een browser default maar 2 simultane connecties maken naar dezelfde server.
Twee oplossingen: gebruik maken van een queue zodat er nooit meer dan 2 ajax-requests tegelijkertijd gedaan kunnen worden, of gewoon zorgen dat je niet elke keer weer een nutteloos nieuw request maakt (afmaken waar je mee bezig bent en daarna pas weer kijken of er nog een request noodzakelijk is).
Vanuit performance oogpunt is de tweede optie meestal het meest wenselijk, je bent nu feitelijk gewoon je eigen server aan het DOSsen.

Overigens: waarom gebruik je links voor behavioral zaken en misbruik je daarbij het href attribuut met het javascript: pseudo-protocol ipv netjes een event-handler?
Die pagina met dat 'voorbeeld' is niet van mij ,maar wel een voorbeeld met gelijk symptomen.

Dat ik me eigen server hiermee zou dossen is niet waar, ondermeer wat jij zegt dat mijn browser maar 2 gelijktijdige connceties naar de server heeft. Met wireshark zie ik wel dat alle verzoeken die gedaan worden ook op gereageerd worden, maar niet opgepakt worden.

Als het goed is zou er bij elk verzoek een nieuw object aangemaakt worden.
Ik bij uitgegaan van een soort gelijk voorbeeld script als op deze pagina: http://www.degraeve.com/reference/simple-ajax-example.php

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Keiichi schreef op dinsdag 23 januari 2007 @ 15:20:
[...]


Die pagina met dat 'voorbeeld' is niet van mij ,maar wel een voorbeeld met gelijk symptomen.

Dat ik me eigen server hiermee zou dossen is niet waar, ondermeer wat jij zegt dat mijn browser maar 2 gelijktijdige connceties naar de server heeft. Met wireshark zie ik wel dat alle verzoeken die gedaan worden ook op gereageerd worden, maar niet opgepakt worden.

Als het goed is zou er bij elk verzoek een nieuw object aangemaakt worden.
Ik bij uitgegaan van een soort gelijk voorbeeld script als op deze pagina: http://www.degraeve.com/reference/simple-ajax-example.php
Ik maakte ook steeds een nieuw object, maar toch werd de 'onreadystatechange' alleen van de laatste aanroep uitgevoerd, ook al werden alle verzoeken wel gedaan.
Probeer dus eens goed uit te zoeken of dat wel goed gaat. :)

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Keiichi schreef op dinsdag 23 januari 2007 @ 15:20:
Dat ik me eigen server hiermee zou dossen is niet waar, ondermeer wat jij zegt dat mijn browser maar 2 gelijktijdige connceties naar de server heeft. Met wireshark zie ik wel dat alle verzoeken die gedaan worden ook op gereageerd worden, maar niet opgepakt worden.
Dus belast je je server met veel requests, waarvan een aantal overbodig zijn. ;)
Als het goed is zou er bij elk verzoek een nieuw object aangemaakt worden. Ik bij uitgegaan van een soort gelijk voorbeeld script als op deze pagina: http://www.degraeve.com/reference/simple-ajax-example.php
Er wordt naar relevante code van jou gevraagd, AJAX voorbeeldjes kunnen we allemaal wel vinden. ;)

{signature}


  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 12:46

TheDane

1.618

Ik kwam volgens mij exact 't zelfde probleem tegen in een zelf geprutst ( :+ ) zoekformulier.

In Firefox kreeg ik daarbij een javascript error: NS_ERROR_NOT_INITIALIZED

Na kort speuren kwam ik hier een onderbouwing tegen:
http://www.quirksmode.org...09/xmlhttp_notes_a_1.html

Misschien dat je d'r wat aan hebt :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

Keiichi schreef op dinsdag 23 januari 2007 @ 15:20:
[...]
Als het goed is zou er bij elk verzoek een nieuw object aangemaakt worden.
Ik bij uitgegaan van een soort gelijk voorbeeld script als op deze pagina: http://www.degraeve.com/reference/simple-ajax-example.php
Dat voorbeeld komt me bekend voor; hier heb ik al een verbeterde versie gepost. Je overschrijft hier namelijk wel degelijk elke keer je object:

JavaScript:
1
2
3
4
5
6
7
8
9
function foo()
{
    var self = this;
    alert(self.bla);
    self.bla = 'woei!';
}

foo();  // undefined
foo();  // 'woei!'

Intentionally left blank


  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 01-12 19:36
Ik zal morgenochtend een soort van proof of concept code uit mijn code maken. Ik maak dan eerst een 'voorbeeld' zonder wijzigingen aan te brengen (Voor degene die graag mijn eigen code zouden willen zien).
Vanuit daar kan ik kijken of ik aan de hand van jullie reacties iets moois kan fixen ;)

Als het idd zo is wat crisp zegt, dan zou het opgelost kunnen worden :P

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 01-12 19:36
Ik heb mijn script hier staan: http://test.searchy.net/ajax.html

En jawel: http://test.searchy.net/ajax_new.html 8) zo gaat ie wel

[ Voor 35% gewijzigd door Keiichi op 24-01-2007 09:05 ]

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

Ik zou toch kijken of je al die requests niet kan combineren in 1 request en 1 respons.
Overigens is "javascript:" gebruiken in eventhandlers pure onzin.

Intentionally left blank


  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 01-12 19:36
crisp schreef op woensdag 24 januari 2007 @ 10:15:
Ik zou toch kijken of je al die requests niet kan combineren in 1 request en 1 respons.
Ik kan helaas niet de algehele code laten zien in welke contex het gebruikt word.
Ik kan het wel uitleggen hoe ongeveer:

Een gebruiker krijgt een tabel waarin ze hun uren in kunnen vullen. Elke keer als ze van een veld afgeaan door bv tab of enter word er dmv zo'n ajax request worden de door hun ingevulde uren in dat veld verzonden.
Hiervan word een reactie terug verwacht inclusief het totale aantal uren ingevuld (Dit is niet enkel de sum van dit enkele formulieren, maar van diverse formulieren)
Ik heb uitgevonden dat als -of- gebruikers als een gek gaan rammen (als ze bijvoorbeeld over 1 willen invullen, doen ze 1-tab-1-tab-1-tab) zodat het volgende verzoek gestuurd zou worden voordat een reactie verworven is. -of- de server toevallig een keer wat langzamer reageert en de gebruiker wel gewoon door wilt typen.

Ik heb overigens de code nog wat verder aangepast:

http://test.searchy.net/ajax_new_2.html

Eventueel commentaar is welkom :Y
Overigens is "javascript:" gebruiken in eventhandlers pure onzin.
Stijl van newbee programeren waarschijnlijk :$

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/

Pagina: 1