Frage jQuery Ajax-Anfragen werden abgebrochen, ohne gesendet zu werden


Ich versuche, ein Skript an Microsofts World-Wide Telescope App anzuschließen. Letzterer hört Port 5050 nach Befehlen ab. Es läuft auf dem gleichen Computer wie der Browser (Chrome jetzt, aber soweit ich das sehe ist das Verhalten mit Firefox 7 und IE 9 das gleiche).

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 zum Zugriff auf WWT lautet wie folgt:

$.ajax({
    type: 'POST',
    url: url,
    data: data,
    crossDomain: true,
    success: success,
    dataType: dataType
});

URL in diesem Fall ist "http: //127.0.0.1: 5050 / SchichtApi.aspx? cmd = neu & ..." (offensichtlich ... ist hier eine Abkürzung für einige zusätzliche Parameter).

Wenn ich mir die Netzwerkdiagnose in Chrome anschaue, 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 WWT eine neue Ebene erstellen. Ich bekomme jedoch keinen Rückruf. Wenn ich einen Fehlerrückruf hinzufüge, der aufgerufen wird, aber die Fehlereigenschaft auf dem jqXHR-Objekt ist nur "Fehler" und Status ist 0. Wenn ich die Netzwerkanforderung in Chrome ansehe, sehe ich "(abgebrochen)" als Status und keine Antwort .

Wenn ich dieselbe URL verwende und in eine neue Browser-Registerkarte einfüge, kann ich sehen, dass die Antwort die erwartete XML ist.

Natürlich ist ein Unterschied hier, dass dies ein GET, kein POST ist, aber ich habe das in meinem Skript versucht und es macht keinen Unterschied.

Ich bin ziemlich ratlos und würde mich über neue Ideen freuen.


75
2017-09-28 01:05


Ursprung


Antworten:


Wenn jemand anderes dazu kommt, war das Problem, dass wir die Ajax-Anfrage von einem Link machen und nicht verhindern, dass der Link befolgt wird. Also wenn du das in einem machst onclick Attribut, stellen Sie sicher, dass return false; auch.


122
2018-05-14 01:20



Wenn Sie Chrome verwenden, können Sie im standardmäßigen Chrome-Netzwerkbereich nicht genügend Informationen sehen, um die Ursache für einen Fehler zu ermitteln (canceled) anfordern.

Sie müssen verwenden chrome://net-internals/#events Hier sehen Sie das blutige Detail der gesendeten Anfrage - einschließlich versteckter Weiterleitungen / Sicherheitsinformationen über gesendete Cookies usw.

z.B. Die folgende Abbildung zeigt eine Weiterleitung, die ich im Netzwerk-Trace nicht gesehen habe - verursacht dadurch, dass meine Cookies nicht über die Subdomäne gesendet wurden:

t=1374052796448 [st=  1]   +URL_REQUEST_START_JOB  [dt=261]
                            --> load_flags = 143540481 (DO_NOT_SAVE_COOKIES | DO_NOT_SEND_AUTH_DATA | DO_NOT_SEND_COOKIES | ENABLE_LOAD_TIMING | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VALIDATE_CACHE | VERIFY_EV_CERT)
                            --> method = "GET"
                            --> priority = 2
                            --> url = "https://...."
...
t=1374052796708 [st=261]        HTTP_TRANSACTION_READ_RESPONSE_HEADERS
                                --> HTTP/1.1 302 Moved Temporarily
                                    Content-Type: text/html
                                    Date: Wed, 17 Jul 2013 09:19:56 GMT
...
t=1374052796709 [st=262]     +URL_REQUEST_BLOCKED_ON_DELEGATE  [dt=0]
t=1374052796709 [st=262]        CANCELLED
t=1374052796709 [st=262]   -URL_REQUEST_START_JOB
                            --> net_error = -3 (ERR_ABORTED)

98
2017-07-17 09:26



In meinem Fall hatte ich type='submit' Als ich also das Formular einreichte, wurde die Seite neu geladen, bevor der Ajax-Treffer ging, also war eine einfache Lösung zu haben type="button"

type = 'submit' => type = 'button'


7
2017-11-05 10:48



Ich hatte ein ähnliches Problem. In meinem Fall versuche ich einen Webservice auf einem Apache Server + django zu benutzen (der Service wurde von mir selbst geschrieben). Ich hatte die gleiche Ausgabe wie Sie: Chrome sagt, es wurde abgebrochen, während FF es in Ordnung macht. Wenn ich versuchen würde, den Dienst direkt über den Browser anstatt über Ajax zu erreichen, würde es auch funktionieren. Beim Durchstöbern fand ich heraus, dass einige neuere Versionen von Apache die Antwortlänge nicht korrekt in den Antwortheadern festlegten, also tat ich das manuell. Mit Django musste ich nur:

response['Content-Length'] = len(content)

Wenn Sie die Kontrolle über den Dienst haben, auf den Sie zugreifen möchten, erfahren Sie, wie Sie den Antwortheader in der von Ihnen verwendeten Plattform ändern. Andernfalls müssen Sie sich an den Dienstanbieter wenden, um das Problem zu beheben. Offenbar sind FF und viele andere Browser in der Lage, diese Situation korrekt zu behandeln, aber Chrome-Designer haben sich dafür entschieden, dies wie angegeben zu tun.


6
2017-10-31 03:15



Ich hatte ein ähnliches Problem. Mit chrome: // net-internals / # events konnte ich sehen, dass mein Problem auf eine stille Weiterleitung zurückzuführen war. Meine Anfrage wurde in einem Onload-Skript ausgelöst. Die URL war von der Form "http://example.com/inner-path"und der 301 wurde permanent auf" / inner-path "umgeleitet. Um das Problem zu beheben, habe ich einfach die URL in" / inner-path "geändert und das Problem behoben. Ich weiß immer noch nicht, warum ein Skript eine Woche lang funktioniert hat Vorhin gab mir plötzlich ein Problem ... Hoffe das hilft jemandem


4
2017-10-08 17:18



(Verwenden von Web Forms ASP.NET)

Mein Problem war, dass ich versuchte, Ajax aus dem Klick-Ereignis eines Absenden-Knopfes, der ein Server-Side-Click-Event-Setup hatte, abzufeuern. Ich musste den Knopf nur einen einfachen Knopf machen <input type="button"> )


2
2018-05-15 14:57



Ich hatte das gleiche Problem, für mich habe ich den iframe für temporäre Weise erstellt, und ich entfernte den iframe, bevor der Ajax abgeschlossen wird, so dass der Browser meine Ajax-Anfrage abbrechen würde.


2
2018-03-04 20:11



Ich habe diesen Fehler erhalten, wenn ich eine Anfrage über HTTP an eine URL gestellt habe, die HTTPS benötigt. Ich nehme an, dass der Ajax-Anruf die Umleitung nicht behandelt. Dies ist selbst dann der Fall, wenn die Option crossDomain ajax auf "true" gesetzt ist (in JQuery 1.5.2).


1
2018-02-15 23:44