Ich versuche, ein Skript an die World-Wide Telescope-App von Microsoft anzuschließen. Letzterer wartet auf Port 5050 auf Befehle. Es läuft auf demselben Computer wie der Browser (Chrome im Moment, aber soweit ich das beurteilen kann, ist das Verhalten bei Firefox 7 und IE 9 dasselbe).
Ich sende einen "Access-Control-Allow-Origin: *" - Header mit der ursprünglichen HTML-Datei, um zu versuchen, XSS-Einschränkungen als mein Problem zu beseitigen.
Mein Code für den Zugriff auf WWT lautet wie folgt:
$.ajax({
type: 'POST',
url: url,
data: data,
crossDomain: true,
success: success,
dataType: dataType
});
Die URL lautet in diesem Fall "http: //127.0.0.1: 5050 / layerApi.aspx? cmd = new & ..." (offensichtlich ... ist hier eine Abkürzung für einige zusätzliche Parameter).
Wenn ich mir die Netzwerkdiagnose in Chrome ansehe, sehe ich Folgendes:
Request URL:http://127.0.0.1:5050/layerApi.aspx?cmd=new&...
Request Headersview source
Accept:application/xml, text/xml, */*; q=0.01
Content-Type:application/x-www-form-urlencoded
Origin:http://gwheeler4
Referer:http://gwheeler4/conceptconnect.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1
Die Anfrage geht aus - ich sehe, dass WWT eine neue Ebene erstellt. Ich bekomme jedoch keinen Rückruf. Wenn ich einen Fehlerrückruf hinzufüge, der aufgerufen wird, die Fehlereigenschaft für das jqXHR-Objekt jedoch nur "Fehler" und der Status 0 ist. Wenn ich die Netzwerkanforderung in Chrome betrachte, wird "(abgebrochen)" als Status und keine Antwort angezeigt .
Wenn ich dieselbe URL nehme und in einen neuen Browser-Tab einfüge, kann ich sehen, dass die Antwort das erwartete XML ist.
Ein Unterschied hier ist natürlich, dass dies ein GET ist, kein POST, aber ich habe das in meinem Skript versucht und es macht keinen Unterschied.
Ich bin ziemlich verblüfft und würde mich über neue Ideen freuen.
quelle
error
Rückruf zu verarbeiten, um festzustellen, ob er mit einem Fehler zurückgegeben wird?Antworten:
Wenn jemand anderes darauf stößt, hatten wir das Problem, dass wir die Ajax-Anfrage über einen Link stellen und nicht verhindern, dass dem Link gefolgt wird. Wenn Sie dies in einem
onclick
Attribut tun , stellen Sie dies ebenfalls sicherreturn false;
.quelle
return false
Sie außerdem dasonsubmit
Attribut am Ende Ihres Formulars hinzufügen ."return false;"
weist Formulare und Links an, die Aktion abzubrechen. Dies war ursprünglich für die Validierung von Javascript-Formularen vorgesehen, bei denen eine Validierungsfunktion false zurückgibt, wenn das Formular ungültig ist, wodurch das Senden des Formulars verhindert wird.e.preventDefault();
, woe
deronclick
Ereignisparameter ist.Wenn Sie Chrome verwenden, werden im Standard-Chrome-Netzwerkfenster nicht genügend Informationen angezeigt, um die Hauptursache einer
(canceled)
Anforderung zu ermitteln.Sie müssen verwenden
chrome://net-internals/#events
, um die wichtigsten Details der von Ihnen gesendeten Anfrage anzuzeigen - einschließlich versteckter Weiterleitungen / Sicherheitsinformationen zu gesendeten Cookies usw.Beispiel: Im Folgenden wird eine Weiterleitung angezeigt, die in der Netzwerkablaufverfolgung nicht angezeigt wurde. Dies wurde dadurch verursacht, dass meine Cookies nicht domänenübergreifend gesendet wurden:
quelle
In meinem Fall hatte ich
type='submit'
dies, als ich das Formular abschickte, wurde die Seite neu geladen, bevor der Ajax-Treffer losging, so dass eine einfache Lösung zu haben wartype="button"
. Wenn Sie keinen Typ angeben, ist diesersubmit
standardmäßig angegebentype="button"
type='submit'
=>type='button'
ODER
Kein Typ =>
type='button'
quelle
Ich hatte ein ähnliches Problem. In meinem Fall versuche ich, einen Webdienst auf einem Apache-Server + Django zu verwenden (der Dienst wurde von mir selbst geschrieben). Ich hatte die gleiche Ausgabe wie Sie: Chrome sagt, dass sie abgebrochen wurde, während FF es in Ordnung macht. Wenn ich anstelle von Ajax versuchen würde, direkt über den Browser auf den Dienst zuzugreifen, würde dies ebenfalls funktionieren. Beim Googeln stellte ich fest, dass einige neuere Versionen von Apache die Länge der Antwort in den Antwortheadern nicht richtig eingestellt haben, also habe ich dies manuell getan. Mit Django musste ich nur:
Wenn Sie die Kontrolle über den Dienst haben, auf den Sie zugreifen möchten, erfahren Sie, wie Sie den Antwortheader auf der von Ihnen verwendeten Plattform ändern können. Andernfalls müssen Sie sich an den Dienstanbieter wenden, um dieses Problem zu beheben. Anscheinend können FF und viele andere Browser diese Situation korrekt handhaben, aber Chrome-Designer haben beschlossen, dies wie angegeben zu tun.
quelle
Ich hatte ein ähnliches Problem. Mit chrome: // net-internals / # events konnte ich feststellen, dass mein Problem auf eine stille Umleitung zurückzuführen war. Meine Get-Anfrage wurde in einem Onload-Skript ausgelöst. Die URL hatte die Form " http://example.com/inner-path " und der 301 leitete permanent zu "/ inner-path" um. Um das Problem zu beheben, habe ich einfach die URL in "/ inner-path" geändert und das Problem wurde behoben. Ich weiß immer noch nicht, warum ein Skript, das vor einer Woche funktioniert hat, mir plötzlich Probleme bereitete ... Ich hoffe, das hilft jemandem
quelle
(Verwenden von Web Forms ASP.NET)
Mein Problem war, dass ich versucht habe, Ajax aus dem Klickereignis einer Senden-Schaltfläche auszulösen, für die ein serverseitiges Klickereignis eingerichtet wurde. Ich musste den Knopf nur zu einem einfachen Knopf machen (dh
<input type="button">
)quelle
Ich hatte das gleiche Problem, für mich habe ich den Iframe vorübergehend erstellt und den Iframe entfernt, bevor der Ajax vollständig ist, damit der Browser meine Ajax-Anfrage abbricht.
quelle
Wenn Sie die Antwort von @ Kazetsukai erweitern, kann dieses Problem auftreten, wenn Sie Ihre AJAX-Anfrage vom Benutzer stellen, der auf einen Link klickt.
Wenn Sie Ihren Link so einrichten:
Und dann ein Javascript-Handler wie der folgende:
Um zu verhindern, dass Ihr Browser dem Link folgt und laufende Anforderungen abbricht, sollten Sie Folgendes hinzufügen
return false
odere.preventDefault()
die Weitergabe des Klickereignisses verhindern:Oder:
quelle
Ich habe diesen Fehler erhalten, als ich eine Anfrage über http an eine URL gestellt habe, für die https erforderlich ist. Ich denke, der Ajax-Aufruf behandelt die Umleitung nicht. Dies ist auch dann der Fall, wenn die Option crossDomain ajax auf true gesetzt ist (in JQuery 1.5.2).
quelle
Es gibt zwei Möglichkeiten, wenn eine AJAX-Anfrage gelöscht wird (wenn nicht eine Cross-Origin-Anfrage):
Lösung für 1) : Hinzufügen
return false;
odere.preventDefault();
im Ereignishandler.Lösung für 2) : Fügen Sie eine Timeout-Option hinzu, während Sie die AJAX-Anforderung erstellen. Beispiel unten.
Aktivieren Sie für Cross-Origin-Anforderungen die CORS-HTTP-Header (Cross-Origin Resource Sharing).
quelle
In meinem Fall stimmte das Mod-Rewrite von Apache mit der URL überein und leitete die Anfrage an https um.
Schauen Sie sich die Anfrage in chrome: // net-internals / # events an.
Es wird ein internes Protokoll der Anforderung angezeigt. Suchen Sie nach Weiterleitungen.
quelle
Ich hatte das gleiche Problem, aber in meinem Fall stellte sich heraus, dass es sich um ein Cookie-Problem handelte. Die Leute, die am Back-End arbeiteten, hatten den Pfad des JSESSIONID-Cookies geändert, das beim Anmelden bei unserer App festgelegt wurde, und ich hatte ein altes Cookie mit diesem Namen auf meinem Computer, aber mit dem alten Pfad. Als ich versuchte, mich im Browser (Chrome) anzumelden, wurden zwei Cookies mit dem Namen JSESSIONID mit unterschiedlichen Werten an den Server gesendet - was verständlicherweise verwirrte -, sodass die Anforderung abgebrochen wurde. Das Löschen der Cookies von meinem Computer hat das Problem behoben.
quelle
Ich hatte diesen Fehler auf eine gruseligere Art und Weise: Die Registerkarte "Netzwerk" und die Ereignisse "chrome: // net-internals / #" zeigten die Anforderung nicht an, nachdem das js abgeschlossen war. Beim Anhalten des js im Fehler-Callcack wurde auf der Registerkarte "Netzwerk" die Anforderung als (abgebrochen) angezeigt. Das wurde konsequent für genau eine (immer die gleiche) von mehreren ähnlichen Anfragen auf einer Webseite aufgerufen. Nach dem Neustart von Chrome ist der Fehler nicht wieder aufgetreten!
quelle
Ich hatte das in Firefox abgesagt . Einige Ajax-Anrufe funktionierten für mich einwandfrei, aber für den Mitarbeiter, der sie tatsächlich verwenden musste, schlug dies fehl.
Als ich dies über die oben genannten Chrome-Tricks überprüfte, fand ich nichts Verdächtiges. Beim Einchecken in Firebug wurde die Animation "Laden" nach den beiden kleinen Aufrufen und keine Registerkarte "Ergebnis" angezeigt.
Die Lösung war mega einfach: In die Geschichte gehen, die Website finden, mit der rechten Maustaste klicken -> Website vergessen.
Vergessen, nicht löschen.
Danach keine Probleme mehr. Ich vermute, es hat etwas mit dem .htaccess zu tun.
quelle
In meinem Fall war es der fehlende Schrägstrich in der URL. Das Hinzufügen des abschließenden Schrägstrichs löste mein Problem.
quelle
Für den Fall Dropzone.js. In meinem Fall wurde es verursacht, weil der
timeout
Optionswert standardmäßig zu niedrig war. Erhöhen Sie es also um Ihre Bedürfnisse.quelle
Ich hatte dieses Problem mit einem bestimmten 3G-Netzwerk.
Bei DELETE-Anforderungen mit
net_error = -101
in chrome: // net-internals / # -Ereignissen würde dies immer fehlschlagen .Andere Netzwerke haben einwandfrei funktioniert, daher gehe ich davon aus, dass ein fehlerhafter Proxyserver oder ähnliches vorhanden war.
quelle