it-swarm.com.de

Wie gehe ich mit net :: ERR_CONNECTION_REFUSED in jquery ajax um?

Ich habe diese Art von Javascript:

$.ajax({
    url: "//myapi.com/json",
    dataType: "jsonp"
}).done(function (data) {
    selectText('Id', data.country);
}).fail(function (jqXHR, textStatus, errorThrown) {
    var defaultOption = 'US'
    selectDropdownByText('Id', defaultOption);

    console.log(errorThrown);
});

Aber das Problem ist, dass mein ajax auf https-Anfrage nicht funktioniert, weil der angerufene Dienst nicht über https erreichbar ist und ich die Fehlermeldung :ERR_CONNECTION_REFUSED bekomme. Ich habe .fail in einem ajax-Aufruf, aber er behandelt :ERR_CONNECTION_REFUSED.__ nicht. Können Sie in diesem Fall Ratschläge geben, wie :ERR_CONNECTION_REFUSED behandelt werden soll?

Ich habe auch versucht, meinen Ajax-Aufruf in try-catch-Block zu packen, aber es hat auch nicht funktioniert.

15
sreginogemoh

Sie können die timeout-Eigenschaft von $.ajax verwenden, um den error-Callback auszulösen. 

Dadurch wird sichergestellt, dass der Callback error ausgelöst wird, wenn der Server nicht innerhalb einer bestimmten Zeit antwortet.

$.ajax({
    url: "//myapi.com/json",
    dataType: "jsonp",
    timeout: 15000 // adjust the limit. currently its 15 seconds
}).done(function (data) {
    selectText('Id', data.country);
}).fail(function (jqXHR, textStatus, errorThrown) {
    var defaultOption = 'US'
    selectDropdownByText('Id', defaultOption);

    console.log(errorThrown);
});

Dies löst den fail-Callback aus, wenn auch kein Internet vorhanden ist.

6
mohamedrias

Es scheint, dass wenn jqXHR.readyState (d. H. Das readyState-Feld des ersten Parameters der $ .ajax (...). Fail () - Methode) 0 ist, ein Netzwerkfehler aufgetreten ist. Was der genaue Netzwerkfehler ist, konnte ich jedoch nicht über JavaScript ermitteln.

Ich habe mir den Ajax-Code von jQuery angesehen, und xhr.send () (d. H. Die XMLHttpRequest.send ()) -Methode (die den Netzwerkfehler erzeugt) fängt den Fehler weder ab noch wirft er. Daher ist es nicht möglich, es zu fangen.

Es scheint, dass der Browser die richtige Fehlermeldung erkennt und anzeigt, dass jQuery jedoch den bestimmten Netzwerkfehler nicht kennt.

1
Darwin Airola

Also wird fail aufgerufen, wenn wir einen ERR_CONNECTION_REFUSED bekommen, aber es gibt keine Möglichkeit herauszufinden, warum fail aufgerufen wird. Gibt es eine Möglichkeit, innerhalb der Fail-Methode zu ermitteln, warum Dinge fehlgeschlagen sind? Zeitüberschreitung vs. Verbindung abgelehnt? Es gibt einen Unterschied zwischen den beiden. Eines konnte ich erneut versuchen, das andere macht keinen Unterschied.

Sie müssen kein Timeout einstellen, um fehlgeschlagene Verbindungen zu behandeln.

0
BradW