Ich möchte überprüfen, ob eine Seite den Statuscode 401 zurückgibt. Ist dies möglich?
Hier ist mein Versuch, aber er gibt nur 0 zurück.
$.ajax({
url: "http://my-ip/test/test.php",
data: {},
complete: function(xhr, statusText){
alert(xhr.status);
}
});
statusText
stattdessen den Wert des zweiten Parameters für die Rückruffunktion.Antworten:
Dies ist mit der jQuery-
$.ajax()
Methode möglich$.ajax(serverUrl, { type: OutageViewModel.Id() == 0 ? "POST" : "PUT", data: dataToSave, statusCode: { 200: function (response) { alert('1'); AfterSavedAll(); }, 201: function (response) { alert('1'); AfterSavedAll(); }, 400: function (response) { alert('1'); bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function () { }); }, 404: function (response) { alert('1'); bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function () { }); } }, success: function () { alert('1'); }, });
quelle
Das dritte Argument ist das XMLHttpRequest-Objekt, sodass Sie tun können, was Sie wollen.
$.ajax({ url : 'http://example.com', type : 'post', data : 'a=b' }).done(function(data, statusText, xhr){ var status = xhr.status; //200 var head = xhr.getAllResponseHeaders(); //Detail header info });
quelle
Verwenden Sie den Fehlerrückruf.
Zum Beispiel:
jQuery.ajax({'url': '/this_is_not_found', data: {}, error: function(xhr, status) { alert(xhr.status); } });
Alarmiert 404
quelle
Ich denke, Sie sollten auch die Fehlerfunktion der $ .ajax- Methode implementieren .
$.ajax({ url: "http://my-ip/test/test.php", data: {}, complete: function(xhr, statusText){ alert(xhr.status); }, error: function(xhr, statusText, err){ alert("Error:" + xhr.status); } });
quelle
Ich habe diese Lösung gefunden, bei der Sie einfach den Server-Antwortcode mithilfe des Statuscodes überprüfen können .
Beispiel:
$.ajax({ type : "POST", url : "/package/callApi/createUser", data : JSON.stringify(data), contentType: "application/json; charset=UTF-8", success: function (response) { alert("Account created"); }, statusCode: { 403: function() { // Only if your server returns a 403 status code can it come in this block. :-) alert("Username already exist"); } }, error: function (e) { alert("Server error - " + e); } });
quelle
$.ajax({ url: "http://my-ip/test/test.php", data: {}, error: function(xhr, statusText, errorThrown){alert(xhr.status);} });
quelle
Ich kapsle den jQuery Ajax in eine Methode:
var http_util = function (type, url, params, success_handler, error_handler, base_url) { if(base_url) { url = base_url + url; } var success = arguments[3]?arguments[3]:function(){}; var error = arguments[4]?arguments[4]:function(){}; $.ajax({ type: type, url: url, dataType: 'json', data: params, success: function (data, textStatus, xhr) { if(textStatus === 'success'){ success(xhr.code, data); // there returns the status code } }, error: function (xhr, error_text, statusText) { error(xhr.code, xhr); // there returns the status code } }) }
Verwendung:
http_util('get', 'http://localhost:8000/user/list/', null, function (status_code, data) { console(status_code, data) }, function(status_code, err){ console(status_code, err) })
quelle
Ich hatte große Probleme damit, dass Ajax + jQuery v3 sowohl den Antwortstatuscode als auch Daten von JSON-APIs abruft. jQuery.ajax decodiert JSON-Daten nur, wenn der Status erfolgreich ist, und vertauscht je nach Statuscode die Reihenfolge der Rückrufparameter. Ugghhh.
Der beste Weg, dies zu bekämpfen, besteht darin, die
.always
Kettenmethode aufzurufen und ein wenig aufzuräumen. Hier ist mein Code.$.ajax({ ... }).always(function(data, textStatus, xhr) { var responseCode = null; if (textStatus === "error") { // data variable is actually xhr responseCode = data.status; if (data.responseText) { try { data = JSON.parse(data.responseText); } catch (e) { // Ignore } } } else { responseCode = xhr.status; } console.log("Response code", responseCode); console.log("JSON Data", data); });
quelle
Test in WAMP SERVER apache2
<IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" </IfModule>
quelle