Ohle: Globale Ajax-Initialisierung funktioniert nicht mit Firefox

Hallo,

ich habe ein Ajax-Skript geschrieben, welches eine Anfrage an einen Server schickt und eine Antwort zurück bekommt. Dies funktioniert auch wunderbar. Wenn ich nun die Initialisierung in eine Funktion auslagere, erhalte ich zwar noch den readystate == 4, aber der status ist nicht mehr 200! Wie kommt das?

  
var request = null;  
  
function initAjax() {  
  if (window.XMLHttpRequest) {  
    if(navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion.charAt(0) >= 4)  
    {  
      netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');  
    }  
  
    request = new XMLHttpRequest(); 						  // Mozilla, Safari, Opera  
  } else if (window.ActiveXObject) {  
    try {  
      request = new ActiveXObject('Msxml2.XMLHTTP'); 		  // IE 5  
    } catch (e) {  
      try {  
        request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6  
      } catch (e) {}  
    }  
  }  
}  
  
function Start() {  
  initAjax();  
  if (!request) {  
    return false;  
  } else {			  
  var url = 'http://irgendeinewebsite.de?a=1';  
  
  request.onreadystatechange = ShortTest;  
  request.open('get', url, true);	  
  request.send(null);	  
  return true;  
}  
  

  1. ich habe ein Ajax-Skript geschrieben, welches eine Anfrage an einen Server schickt und eine Antwort zurück bekommt. Dies funktioniert auch wunderbar. Wenn ich nun die Initialisierung in eine Funktion auslagere, erhalte ich zwar noch den readystate == 4, aber der status ist nicht mehr 200! Wie kommt das?

    Keine Ahnung, das läßt sich mit deinen Code nicht nachvollziehen.

    function initAjax() {
      if (window.XMLHttpRequest) {
        if(navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion.charAt(0) >= 4)
        {
          netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
        }

    Das ist aber ein gewagter Rückschluss. Jeder der Netscape im Browserstring mit sich führt, kann die Funktion ausführen?
    Warum prüfst du nicht auf das Objekt oder verwendest try {} catch?

    Wozu soll das eigentlich dienen? soweit ich das sehe, ist das irgendwas für den Firefox 1.5 um irgendwelche Dateien einzulesen. Tust du das hier?

    Struppi.

    1. netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');

      Diese Zeile habe ich eingefügt, um auf externe Server zugreifen zu können. Kannst du deinen alternativen Vorschlag etwas umschreiben?

      1. netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');

        Diese Zeile habe ich eingefügt, um auf externe Server zugreifen zu können. Kannst du deinen alternativen Vorschlag etwas umschreiben?

        Und das funktioniert? Das bezweifle ich.

        Mein Vorschlag bezog sich allgemein auf deinen Funktionalitäts Test. Besser ist sowas:

        if(objekt.funktion) objekt.funktion();

        u.U. noch mit typeof

        Struppi.

        1. So, ich habe das jetzt noch mal etwas umgeschrieben (auch wenn es vorher schon funktionierte mit dem IE):

          Das Problem liegt glaube ich daran, dass es sich um cross-site scripting handelt. Ich greife in diesem Fall auf meinen Apache-Server auf dem Notebook zu, um den Server zu simulieren. Wie kann ich Firefox so konfigurieren, dass es auch dort funktioniert und nicht nur mit dem IE? Der request-Status ist bei Firefox nicht 200 --> readystate ist aber 4. Auf meinem Apache-Server läuft übrigens ein php-script.

          1. Hi,

            Wie kann ich Firefox so konfigurieren, dass es auch dort funktioniert und nicht nur mit dem IE?

            Den Client zu konfigurieren, reicht da allein wohl nicht aus.

            https://developer.mozilla.org/En/Using_XMLHttpRequest#Cross-site_XMLHttpRequest

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. » Den Client zu konfigurieren, reicht da allein wohl nicht aus.

              Das habe ich auch schon gelesen - wenn ich mir in Wireshark aber meine Anfrage an den Webserver anschaue, dann ist der Parameter Origin = null, vermutlich weil es sich um eine locale Website handelt. Auf verschiedenen Seiten habe ich gelesen, dass bei Origin = null kein status = 200 gesendet wird. Ich kann also Allow-Access[...] Origin: * ; auf dem Webserver setzen, ohne dass dies etwas nützt.

              1. Hallo,

                Ich mache das im FF so, unmittelbar vor open und send:

                  
                                try{ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } // enable cross-domain AJAX request  
                                catch(e) {alert('Sorry: Cannot get data from external domain.'); return;}  
                
                

                HTML und JS kommen vom localhost, der request geht aber an eine externe domain im Internet. Die antwortet dann auch mit Status 200 und schickt die gewünschten Daten.

                Gruß, Don P

                1. @Don P: Vielen Dank - das war DER Tipp!