[AJAX] Werkt alleen in internet explorer

Pagina: 1
Acties:

  • Blaatpraat
  • Registratie: Augustus 2007
  • Laatst online: 05-09 09:21

Blaatpraat

Geen moderator

Topicstarter
Op een pagina die ik gemaakt heb, gebruik ik een stukje ajax.
Met name het volgende:

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
var element;

function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } else if(window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
    return xmlHttp;
}

function checkport(port, elem) {
    element = elem;
    xmlHttp = createXMLHttpRequest();
    xmlHttp.onreadystatechange=returnport;
    xmlHttp.open("GET","checkport.php?port="+port,true);
    xmlHttp.send(null);
}

function returnport() {
    if (xmlHttp.readyState==4) {
        document.getElementById(element).innerHTML = xmlHttp.responseText;
    }
}


Nu is het vreemde: enkel in internet explorer 8 (oudere versies heb ik niet hier) werkt dit.
M'n main browser is opera, en hierin voert hij dit niet uit (ik krijg echter ook geen javascript error).

Ik zie geen fouten in m'n stukje code, ik heb zelfs even een code van het internet overgenomen, aangepast aan mijn waarden en dit deed het ook niet.
Andere mensen die firefox of chrome gebruiken hebben dit probleem ook hiermee, waardoor het toch wel aan m'n code lijkt te liggen, maar ik zie het niet.
Iemand een idee?

  • Hellion
  • Registratie: Juli 2009
  • Laatst online: 02-09 13:16
Het zit hem in de createXMLHttpRequest

Ik gebruikte altijd deze xmlHttp, misschien werkt het

code:
1
2
3
4
5
6
7
8
9
10
11
xmlHttp = null;
  // Firefox, Opera 8.0+, Safari
  try { xmlHttp=new XMLHttpRequest(); }
  // Internet Explorer  
    catch (e) {
   try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
    catch (e)
    { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
  }
  //niet gelukt
    if (xmlHttp==null) { alert ("Your browser does not support AJAX!"); return; }

  • Blaatpraat
  • Registratie: Augustus 2007
  • Laatst online: 05-09 09:21

Blaatpraat

Geen moderator

Topicstarter
Maakt geen verschil, IE8 blijft resultaten tonen, opera en andere browsers niet.
Als ik alert(xmlHttp) doe, zie ik ook dat er wel effectief een request gemaakt is in opera.

  • loeve
  • Registratie: Augustus 2004
  • Laatst online: 25-08 13:41
De xmlHttp is geen variabele.
Declareer: var xmlHttp = null ;

Verwijderd

Of je gaat even moeilijk doen? Gebruik jQuery. Waarom? Omdat elke browser het op een andere manier doet.

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 15-08 22:46

KompjoeFriek

Statsidioot

Dat helpt bij dit probleem Cagalli, maar je kunt niet altijd op andere vertrouwen om het moeilijkere werk voor je te doen.

Tweaker-Steyn: Opera heeft Dragonfly (Tools -> Advanced -> Opera Dragonfly) waarmee je zelf ook kunt debuggen.

Werkende voorbeelden van een crossbrowser xmlhttprequest object zijn ook niet moeilijk te vinden ;)

WhatPulse! - Rosetta@Home - Docking@Home


  • Blaatpraat
  • Registratie: Augustus 2007
  • Laatst online: 05-09 09:21

Blaatpraat

Geen moderator

Topicstarter
Jquery ben ik niet vertrouwd mee, zal ik wel nog eens moeten opzoeken wat de mogelijkheden ervan zijn, om dit ook te beheersen.

Ik gebruikte al de javascript inspector van opera (die dus de errors toont), die dragonfly is handig, thanx voor de tip. Ik zie nu bijvoorbeeld dat er 13 GET's naar checkport.php worden gedaan (wat dus klopt).
Toch blijft het vreemd dat hij niks toont.

Eigen debug toonde dat ik readystate 1&2 overal kreeg, maar slechts 1x (van de 13) 3&4 (ik krijg dus ook maar 1x een return).

M'n xmlHttpRequest zou toch moeten werken? Ik gebruik nu btw het voorbeeld van Hellon. Ik zal nog even wat voorbeelden proberen. Echter vind ik het vreemd, aangezien m'n eigen xmlHttpRequest het altijd heeft gedaan.

@Loeve: declaratie hoeft toch niet in JS? Als een variable niet aangemaakt is, wordt deze automatisch aangemaakt in de function toch? Echter als ik hem aanmaak, blijft het probleem.

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 08-09 14:12
Verwijderd schreef op zaterdag 11 september 2010 @ 17:20:
Of je gaat even moeilijk doen? Gebruik jQuery. Waarom? Omdat elke browser het op een andere manier doet.
Voor iets als dit is jQuery gebruiken écht niet nodig. Alle browsers doen dit hetzelfde, op IE5/6 na.

Dit is wat ik gebruik en dat werkt prima:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function ajaxSetup()
{
    var xmlHttp=null;
    try
    {
        xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
        // IE 5/6
        try
        {
            xmlHttp=new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch (e)
        {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

Full-stack webdeveloper in Groningen


  • dB90
  • Registratie: Oktober 2004
  • Laatst online: 03-09 17:28
Gaat er niet iets mis met checkport.php :?

Webberry Webdevelopment


  • Blaatpraat
  • Registratie: Augustus 2007
  • Laatst online: 05-09 09:21

Blaatpraat

Geen moderator

Topicstarter
M'n xmlhttprequest zou het goed moeten doen, maar zelfs met het voorbeeld van ZanderZ krijg ik geen verschil, zelfde resultaat.

@dB90: deze output gewoon 1 woord, die dan moet ingevuld worden op de pagina (en dit doet hij 13x, in de toekomst soms wat meer).
Waarom ik hiervoor koos: het kan zijn dat het per keer 5 seconden duurt voordat hij het weet wat hij moet tonen, en dat kan ik natuurlijk niet tonen op een pagina, dus standaard staat het vakje leeg, en via javascript roept hij de functie aan die het woord moet invullen.

Ik heb een voorbeeld online trouwens, misschien helpt dit:
www.favonet.be

Let niet op de layout, het is de functionaliteit die telt voorlopig.

edit: heb nu even de 3 scripts naast mekaar getest, en enkel met die van mijzelf doet IE het direct, met de andere zit er ook een lag bij.
Daarom heb ik die 2 andere even in commentaar geplaatst, maar ze staan er wel in.

[ Voor 14% gewijzigd door Blaatpraat op 11-09-2010 22:11 ]


Acties:
  • 0 Henk 'm!

  • dB90
  • Registratie: Oktober 2004
  • Laatst online: 03-09 17:28
Komt het niet doordat je, voordat je resultaat krijgt, je alweer opnieuw xmlHttp aanmaakt? Misschien iets doen met een queue? Check dit anders even.

[ Voor 19% gewijzigd door dB90 op 12-09-2010 00:55 . Reden: Linkje toegevoegd ]

Webberry Webdevelopment


Acties:
  • 0 Henk 'm!

  • Blaatpraat
  • Registratie: Augustus 2007
  • Laatst online: 05-09 09:21

Blaatpraat

Geen moderator

Topicstarter
Dat was de oplossing, dacht daar inderdaad ook al aan, maar vond niet meteen iets.
Met die code (en wat aanpassing van mijn kant) is het gelukt:

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
var element = new Array();
var xmlreqs = new Array();

function CXMLReq(freed) {
    this.freed = freed;
    this.xmlhttp = false;
    if (window.XMLHttpRequest) {
        this.xmlhttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
}

function xmlreqGET(port, elem) {
    var pos = -1;
    for (var i=0; i<xmlreqs.length; i++) {
        if (xmlreqs[i].freed == 1) { pos = i; break; }
    }
    if (pos == -1) { pos = xmlreqs.length; xmlreqs[pos] = new CXMLReq(1); }
    if (xmlreqs[pos].xmlhttp) {
        element[pos] = elem;
        xmlreqs[pos].freed = 0;
        xmlreqs[pos].xmlhttp.open("GET","checkport.php?port="+port,true);
        xmlreqs[pos].xmlhttp.onreadystatechange = function() {
            if (typeof(xmlhttpChange) != 'undefined') { xmlhttpChange(pos); }
        }
        if (window.XMLHttpRequest) {
            xmlreqs[pos].xmlhttp.send(null);
        } else if (window.ActiveXObject) {
            xmlreqs[pos].xmlhttp.send();
        }
    }
}

function xmlhttpChange(pos) {
    if (typeof(xmlreqs[pos]) != 'undefined' && xmlreqs[pos].freed == 0 && xmlreqs[pos].xmlhttp.readyState == 4) {
        document.getElementById(element[pos]).innerHTML = xmlreqs[pos].xmlhttp.responseText;
        xmlreqs[pos].freed = 1;
    }
}


Thanx! :)
Pagina: 1