Leerer Antworttext von XMLHttpRequest

Lesezeit: 3 Minuten

Leerer Antworttext von XMLHttpRequest
PurplePilot

Ich habe eine XMLHttpRequest geschrieben, die gut läuft, aber einen leeren Antworttext zurückgibt.

Das Javascript lautet wie folgt:

  var anUrl = "http://api.xxx.com/rates/csv/rates.txt";
  var myRequest = new XMLHttpRequest();

  callAjax(anUrl);

  function callAjax(url) {
     myRequest.open("GET", url, true);
     myRequest.onreadystatechange = responseAjax;
                 myRequest.setRequestHeader("Cache-Control", "no-cache");
     myRequest.send(null);
  }

  function responseAjax() {
     if(myRequest.readyState == 4) {
        if(myRequest.status == 200) {
            result = myRequest.responseText;
            alert(result);
            alert("we made it");
        } else {
            alert( " An error has occurred: " + myRequest.statusText);
        }
     }
  }

Der Code läuft gut. Ich kann durchgehen und bekomme den readyState == 4 und einen Status == 200, aber der responseText ist immer leer.

Ich erhalte einen Protokollfehler (im Safari-Debug) von Error Dispatching: getProperties, auf den ich anscheinend keinen Verweis finden kann.

Ich habe den Code in Safari und Firefox sowohl lokal als auch auf einem Remote-Server ausgeführt.

Wenn die URL in einen Browser eingegeben wird, gibt sie die Zeichenfolge zurück und gibt einen Statuscode von 200 an.

Ich habe ähnlichen Code für dieselbe URL in einem Mac-Widget geschrieben, das einwandfrei läuft, aber derselbe Code in einem Browser gibt nie ein Ergebnis zurück.

  • Etwas, das ich entdeckt habe und das zu einem Teil meiner anfänglichen Verwirrung geführt hat, ist, dass Safari ein modifiziertes Sicherheitsmodell hat, das es Dateien ermöglicht, die lokal ausgeführt werden, um auf Anfragen von jedem Ursprung zuzugreifen. Dies geschah, damit Dashboard-Widgets Kaltzugriffsanforderungen haben. Also habe ich anfangs ein Widget geschrieben, das funktionierte, dann, wenn ich Safari nicht benutzte oder von der lokalen Maschine aus, funktionierte es nicht. Allerdings bin ich gerade erst auf diesen Tweak gestoßen.

    – PurplePilot

    3. Mai ’10 um 6:50 Uhr

Leerer Antworttext von XMLHttpRequest
Daniel Wassallo

Ist http://api.xxx.com/ Teil Ihrer Domain? Wenn nicht, werden Sie von der blockiert gleiche Ursprungspolitik.

Vielleicht möchten Sie sich den folgenden Stack Overflow-Beitrag ansehen, um einige mögliche Problemumgehungen zu finden:

  • Möglichkeiten zur Umgehung der Same-Origin-Policy

  • Ich hatte das Gefühl, dass es daran liegen könnte. Der verwirrende Aspekt dabei ist, dass ich in einem Mac-Widget XMLHttpRequest verwendet habe, um dasselbe zu tun, und es funktioniert. Ich gehe davon aus, dass ich mich im Fall des Widgets nicht in einem Browser befinde, also nicht blockiert bin.

    – PurplePilot

    22. Dezember 2009 um 6:49 Uhr

  • Eigentlich hat dies nichts mit xss zu tun, das dadurch verursacht wird, dass Benutzereingaben nicht validiert werden. Die Verwendung von XHR für den Zugriff auf eine andere Domain stellt einen Verstoß gegen die Same Origin Policy dar: code.google.com/p/browsersec/wiki/Part2

    – Turm

    13. April 10 um 21:57 Uhr

  • @The Rook: Danke für den Hinweis. Meine Antwort korrigiert.

    – Daniel Vasallo

    13. April 10 um 22:06 Uhr


Leerer Antworttext von XMLHttpRequest
Iwan David

PROBLEM GELÖST

In meinem Fall war das Problem, dass ich den Ajax-Aufruf (mit $.ajax-, $.get- oder $.getJSON-Methoden von jQuery) mit mache vollständigen Pfad im URL-Parameter:

URL: “http://mydomain.com/site/cgi-bin/serverApp.php

Aber der richtige Weg ist, den Wert von url wie folgt zu übergeben:

URL: “site/cgi-bin/serverApp.php”

Einige Browser kollidieren nicht und unterscheiden nicht zwischen dem einen oder anderen Text, aber in Firefox 3.6 für Mac OS nehmen Sie dies vollständigen Pfad wie “Cross-Site-Scripting“… noch etwas, im selben Browser wird unterschieden zwischen:

http://mydomain.com/site/index.html

Und legen

http://www.mydomain.com/site/index.html

Tatsächlich ist es die richtige Sichtweise, aber die meisten Implementierungen machen keinen Unterschied, also bestand die Lösung darin, den gesamten Text zu entfernen, der die spezifiziert vollständigen Pfad zum Skript in den Methoden, die die Ajax-Anforderung ausführen UND…. entfernen Sie alle BASE -Tag in der Datei index.html

base href=”http://mydomain.com/” <--- schlechte Idee, entfernen Sie sie!

Wenn Sie es nicht entfernen, kann diese Version des Browsers für dieses System Ihre Ajax-Anfrage so behandeln, als wäre es eine Cross-Site-Anfrage!

Ich habe das gleiche Problem, aber nur auf dem Mac OS-Rechner. Das Problem ist, dass Firefox die Ajax-Antwort als “Cross-Site”-Aufruf behandelt, auf jedem anderen Computer/Browser funktioniert es einwandfrei. Ich habe dazu keine Hilfe gefunden (ich denke, das ist ein Firefox-Implementierungsproblem), aber ich werde den nächsten Code auf der Serverseite beweisen:

header('Content-type: application/json');

um sicherzustellen, dass der Browser die Daten als “json-Daten” erhält …

  • Das Hinzufügen des Antwortheaders Content-Type: application/json hat bei mir funktioniert.

    – Dheerendra Kulkarni

    8. Januar 15 um 9:03 Uhr

1644322029 7 Leerer Antworttext von XMLHttpRequest
Jakob Relk

Der Browser verhindert Cross-Site-Scripting.

Wenn sich die URL außerhalb Ihrer Domain befindet, müssen Sie dies auf der Serverseite tun oder sie in Ihre Domain verschieben.

Dies ist möglicherweise nicht der beste Weg, dies zu tun. Aber es hat irgendwie für mich funktioniert, also werde ich damit laufen.

In meiner PHP-Funktion, die die Daten zurückgibt, füge ich eine Zeile vor der Rückgabezeile eine Echo-Anweisung hinzu, die die Daten wiedergibt, die ich senden möchte.

Jetzt sicher, warum es funktioniert hat, aber es hat funktioniert.

1644322029 625 Leerer Antworttext von XMLHttpRequest
Wo

Hatte ein ähnliches Problem wie du. Was wir tun mussten, ist die hier gefundene document.domain-Lösung zu verwenden:

Möglichkeiten zur Umgehung der Same-Origin-Policy

Wir mussten auch auf der Seite des Webservice etwas ändern. Verwendet den hier gefundenen Header “Access-Control-Allow-Origin”:

https://developer.mozilla.org/En/HTTP_access_control

.

822440cookie-checkLeerer Antworttext von XMLHttpRequest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy