[AJAX/PHP] Twee requests snel achter elkaar werkt niet in FF

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01 14:21

bluesbrother

Blues Rocks!!!

Topicstarter
Ik ben een component aan het maken in Joomla.
Dit is voor de vraag denk ik niet relevant maar ik zet het er toch even bij.
Ik heb een probleem met AJAX
Ik moest 2 requests snel achter elkaar doen, en dit gaf problemen.
Dit vond ajax niet leuk. Voor ik erachter was dat het daar aan lag was ik wel weer even verder.
Nu heb ik een oplossing gevonden en dat betekend dat ik in mijn Ajax functie async op false heb moeten zetten. Het werkt nu wel. En ik kan meerdere requests snel achter elkaar doen.
Alleen zie ik die wel in IE en niet in FF.
In firebug van FF zie ik wel netjes het request komen en deze komt terug met een antwoord die ook klopt, alleen drukt deze niet af op het scherm. Ik krijg geen fout meldingen en kan geen aanknopingspunten vinden.
Als ik Async op true zet, zie ik ze wel, alleen krijg ik 2 keer dezelfde comboboxen.

(Ik gebruik het om 2 comboboxen dynamisch te laden, en die zie ik wel in IE en niet in FF)

[code]xmlHttp.open("GET", ServerPage, false);[code]

Ik heb al diverse draadjes bestudeerd en ben een heel eind gekomen.
O.a. deze gaf wel wat info.

Mijn ajax functies:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function doAjaxPage (ServerPage, ToLoadIntoObj){


        var obj = document.getElementById(ToLoadIntoObj);

        xmlHttp = GetXmlHttpObject();
                 
        xmlHttp.open("GET", ServerPage, false);
                                
        xmlHttp.onreadystatechange = function(){ 
        
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
        
                obj.innerHTML = xmlHttp.responseText;
        }
        }
    
        xmlHttp.send(null);


}// end function doAjaxPage


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
function GetXmlHttpObject()
{
            
                var xmlHttp=null;
try
 {
            //IE
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            
 }
catch (e)
 {
 //Internet Explorer
 try
  {             //IE 2
                xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
            // Firefox, Opera 8.0+, Safari
                    xmlHttp=new XMLHttpRequest();   
  }
 }
        return xmlHttp;
}

Hopelijk dat jullie me verder kunnen helpen.
BB 8)

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Hoe vaak wil jij nog op stickies en FAQ's gewezen worden? :?

Waar hoort mijn topic?

PRG>>WEB + titelchange

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Dit werkt hier prima:
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
function GetXmlHttpObject()
{
  var tmp = null;
  try { tmp = new XMLHttpRequest(); }
  catch (e)
  {
    try { tmp = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch (e)
    {
      tmp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return tmp;
}

function stateChanged() 
{
  if (this.readyState == 4 && this.callback)
  {
    if (this.param)
      this.callback(this, this.param);
    else
      this.callback(this);
    this.callback = null;
    this.constr = null;
  }
}

//ajax = new Object();
ajax = function(url, callback)
{
  this.url = url;
  this.callback = callback;
  this.xmlHttp = GetXmlHttpObject();
  if (arguments[2]) this.xmlHttp.param = arguments[2];
  this.xmlHttp.callback = callback;
  this.xmlHttp.constr = this;
  this.xmlHttp.onreadystatechange=stateChanged;
  this.xmlHttp.open("GET", this.url, true);
  this.xmlHttp.send(null);
  return this.xmlHttp;
}


Aanroepen met
new ajax(url, functie, eventuele_param1, ..);

function functie(xml, eventuele_param1,..)
{
alert(xml.responseText);
}

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01 14:21

bluesbrother

Blues Rocks!!!

Topicstarter
NMe schreef op vrijdag 27 maart 2009 @ 13:00:
Hoe vaak wil jij nog op stickies en FAQ's gewezen worden? :?

Waar hoort mijn topic?

PRG>>WEB + titelchange
Ik zoek naar een oplossing, zie een topic staan over ajax, en zet het daaronder.FOUT!! stoute BB.

Antwoord van Guillome zal ik vanmiddag eens proberen. Als het niet lukt dan volgende week.
Bedankt alvast.

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:36

crisp

Devver

Pixelated

JavaScript:
1
xmlHttp = GetXmlHttpObject();

Je definieert je xmlHttp object reference niet specifiek in de functie-scope, dus wordt die global. Bij 2 aanroepen achter elkaar naar doAjaxPage() en gebruik van async loading betekent dat dus dat je tweede call de reference van de eerste overschrijft.

Dat je geen resultaat ziet bij een synchroon request zal wel te maken hebben met het feit dat onreadystatechange dan niet wordt afgevuurt - dat event is specifiek voor asynchrone requests.

Oplossing: gebruik gewoon een standaard library of verdiep je wat verder in de materie ;)

De functie van Guillome doet zo te zien enkel async requests en zou niet mijn voorkeur hebben...

[ Voor 7% gewijzigd door crisp op 27-03-2009 13:31 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

leg es uit?

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Acties:
  • 0 Henk 'm!

  • bluesbrother
  • Registratie: Februari 2002
  • Laatst online: 26-01 14:21

bluesbrother

Blues Rocks!!!

Topicstarter
Ja graag.

Juist door te doen wil ik er meer van leren. Dan loop ik nog wel eens tegen problemen aan.
Daarom wil ik geen standaard library gebruiken. Als ik daar iets anders wil dan er in een standaard library kan dan moet ik het nog steeds snappen om er een aanpassing in te kunnen doen.
Ik heb mijn kennis nu van w3schools vandaan. En andere voorbeeldjes.

Wil je je pizza in 4 of 8 stukken? .......Doe maar in 4, 8 krijg ik niet op.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:36

crisp

Devver

Pixelated

Hij is nogal beperkt (alleen GET, alleen async request etcetera), geen hergebruik van XHR object instances, het 'extenden' van je XHR instance met allerlei properties kan voor problemen zorgen in o.a. IE, geen error-handling, GetXmlHttpObject() kan veel netter op deze manier:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (!window.XMLHttpRequest)
{
    window.XMLHttpRequest = function()
    {
        // http://blogs.msdn.com/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx
        var types = [
            'MSXML2.XMLHTTP.6.0',
            'MSXML2.XMLHTTP.3.0'
        ];

        for (var i = 0; i < types.length; i++)
        {
            try
            {
                return new ActiveXObject(types[i]);
            }
            catch(e) {}
        }

        return undefined;
    }
}


zodat je gewoon crossbrowser new XMLHttpRequest() kan doen. En dan is er nog dit probleem: Crisp's blog: XMLHttpRequest and the scope of events

just to name a few ;)

Intentionally left blank

Pagina: 1