Blutorange: HTTPRequest Problem mit versch. Browsern

Also ich kann per HTTPRequest ohne Probleme auf Dateien zugreifen,
die auf dem Webserver liegen.
Versuche ich jedoch auf Dateien auf anderen Server zuzugreifen,
geht das nach einmaligem nachfragen im IE ohne Probleme,
Firefox und Opera hingegegen kriegen nur ReadyState = 2 und "erreichen" nie 4.
Daraus folgt dann, das der Request nicht vollstaendig ist und man auf die Daten nicht zugreifen kann.

Hat irgendwer eine Idee a) ob man das in Ff und Opera irgendwie aktivieren kann und b) ob man das irgendwie "umgehen" kann, dass dann nicht jeder User das erst umstellen muesste.

MfG

Anbeit noch der Quellcode:

<html>
<head>
 <script type="text/javascript">
 function handle(response)
 {
  document.getElementById('table').innerHTML = response
 }
  function request(file)
  {
   var req = null;
   try
   {
    req = new XMLHttpRequest();
   }
   catch (e)
   {
   try
   {
    req = new ActiveXObject("Msxml2.XMLHTTP");
   }
   catch (e)
   {
    try
    {
     req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e)
    {
     alert("Your browser does not support AJAX!");
     req = null;
     return false;
    }
   }
  }
  if (req == null)
   alert("Error creating request object!");
  req.open("GET", file, true);
  req.onreadystatechange=function()
  {
   alert(req.readyState);
   switch(req.readyState)
   {
    case 4:
     if(req.status!=200)
     {
      alert("Fehler:"+req.status);
     }
     else
     {
      handle(req.responseText);
     }
     break;
    default:
     return false;
     break;
   }
  };
  req.send(null);
  }
 </script>
</head>
<body>
<div id="table" style="width: 200; height: 50;">
</div>
<div onclick="javascript:request('styles/style.css');">Test</div>
</body>
</html>

  1. Hi,

    Also ich kann per HTTPRequest ohne Probleme auf Dateien zugreifen,
    die auf dem Webserver liegen.

    Versuche ich jedoch auf Dateien auf anderen Server zuzugreifen,
    geht das nach einmaligem nachfragen im IE ohne Probleme,
    Firefox und Opera hingegegen kriegen nur ReadyState = 2 und "erreichen" nie 4.
    Daraus folgt dann, das der Request nicht vollstaendig ist und man auf die Daten nicht zugreifen kann.

    Mit JS darfst du nämlich laut der Same origin policy nicht auf andere Webserver zugreifen. Der IE hält sich wohl nicht so streng daran wie andere Brwoser.

    Hat irgendwer eine Idee a) ob man das in Ff und Opera irgendwie aktivieren kann und b) ob man das irgendwie "umgehen" kann, dass dann nicht jeder User das erst umstellen muesste.

    Hier steht noch ein bisschen darüber.

    mfG,
    steckl

  2. Yerf!

    Also ich kann per HTTPRequest ohne Probleme auf Dateien zugreifen,
    die auf dem Webserver liegen.
    Versuche ich jedoch auf Dateien auf anderen Server zuzugreifen,
    geht das nach einmaligem nachfragen im IE ohne Probleme,
    Firefox und Opera hingegegen kriegen nur ReadyState = 2 und "erreichen" nie 4.

    "Same Origin Policy"

    Hat irgendwer eine Idee a) ob man das in Ff und Opera irgendwie aktivieren kann und

    Keine Ahnung, aber ich glaube nicht, dass das geht.

    b) ob man das irgendwie "umgehen" kann, dass dann nicht jeder User das erst umstellen muesste.

    Benutze deinen eigenen Webserver als eine Art "Proxy". Sende den Request an eine Seite auf deinem Server und starte von dort aus per PHP (oder sonstigem) einen Request auf den Zielserver, lade die Inhalte und gib sie dann an den Browser zurück.

    Gruß,

    Harlequin

  3. Hi,

    ob man das irgendwie "umgehen" kann, dass dann nicht jeder User das erst umstellen muesste.

    Indem Du einen serverseitigen Mechanismus zwischenschaltest (z.B. ein eigenes PHP-Script oder mod_proxy).

    try
       {
        req = new XMLHttpRequest();
       }

    Sofern möglich, ist ein if eleganter (und schneller) als try...catch

    try
       {
        req = new ActiveXObject("Msxml2.XMLHTTP");
       }
       catch (e)

    Überflüssig.

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!