Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Javascript: ajax request server time out

Pagina: 1
Acties:
  • 323 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben momenteel bezig met het maken van een chat in php en javascript (ajax).

Ieder paar seconden herlaad ik een .php bestand. Dit gaat allemaal goed, tot dat de server niet (snel genoeg) reageerd. Dit komt ongeveer bij 1 request per 2 uur voor. Je krijgt dan een javascript error. Buiten dat deze lelijk is, werkt vanaf dan geen enkel javascript meer in internet explorer totdat je de pagina herlaad.

Om dit te voorkomen dacht ik een try - catch constructie om het request heen te maken in javascript, helaas maakt dit geen verschil.

De code:
code:
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
45
46
47
48
49
//object aanmaken
if(window.XMLHttpRequest)
{
    try
    {
        MyHttpRequest = new XMLHttpRequest();
    }
    catch(e)
    {
        MyHttpRequest = false;
    }
}
else if(window.ActiveXObject)
{
    try
    {
        MyHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
        try
        {
            MyHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            MyHttpRequest = false;
        }
    }
}
else
{
    MyHttpRequest = false;
}

//verzoek versturen
if(MyHttpRequest)
{       
    try
    {
        MyHttpRequest.open("get", "bestand.php?random=123.rand", false);
        MyHttpRequest.send(null);
        return MyHttpRequest.responseText;  
    }
    catch(e)
    {
       document.write("Kon geen ajax request naar de server sturen.<br>" + e.message)
    }
}


Heeft iemand advies hoe ik dit in javascript kan oplossen? Mijn webhoster wil/kan er in ieder geval niets aan doen.

Alvast bedankt! _/-\o_

Verwijderd

Begin eens met asynchrone requests. Dat lijkt me een stuk verstandiger voor de functionaliteit die jij wilt bieden. Het vergt wel een iets ander aanpak, maar je hebt in elk geval geen blocking calls.

Verwijderd

Topicstarter
Ter verduidelijking heb ik hier ook nog een screenshot van de Firebug (een firefox plugin) met daarin de fout (klik om te vergoten).

Edit: foto verwijderd

[ Voor 44% gewijzigd door Verwijderd op 29-06-2008 14:27 ]


Verwijderd

Topicstarter
Wat is het verschil tussen asynchrone requests en de aanpak die ik nu doe?

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 28-11 15:56

killercow

eth0

Verwijderd schreef op woensdag 14 november 2007 @ 19:16:
Wat is het verschil tussen asynchrone requests en de aanpak die ik nu doe?
De browser handelt nu deze thread af, en wacht tot er resultaat is. Daarna pas gaat je script verder.

Als je asynchrone threads pakt zal de browser niet wachten tot deze thread klaar is maar gewoon een nieuwe opstarten mits hier plek voor is in de thread spooler. (de meeste browsers maken maar 2 connecties tegelijk naar een domein)

openkat.nl al gezien?


Verwijderd

Topicstarter
Klinkt goed, hoe doe ik dit?

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 28-11 15:56

killercow

eth0

De laatste var in je open functie op true zetten, alleen zul je dan ook de afvanging van de binnenkomende data wat anders moeten gaan regelen, google's your friend.

openkat.nl al gezien?


  • ruudboon
  • Registratie: September 2001
  • Laatst online: 13-10 12:17
Kijk eens op www.prototypejs.org een libary met allemaal handige ajax functions.
Foutafhandling zit dan gewoon al ingebouwd.
Voorbeeldje :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var url = '/proxy?url=' + encodeURIComponent('http://www.google.com/search?q=Prototype');
// notice the use of a proxy to circumvent the Same Origin Policy.

new Ajax.Request(url, {
  method: 'get',
  onSuccess: function(transport) {
    var notice = $('notice');
    if (transport.responseText.match(/href="http:\/\/prototypejs.org/))
      notice.update('Yeah! You are in the Top 10!').setStyle({ background: '#dfd' });
    else
      notice.update('Damn! You are beyond #10...').setStyle({ background: '#fdd' });
  },
  onFailure: call_naar_alert_functie()
});

Verwijderd

Topicstarter
-

[ Voor 99% gewijzigd door Verwijderd op 22-11-2007 14:59 ]

Pagina: 1