Mam wywołanie ajax przekazujące dane do strony, która następnie zwraca wartość.
Pobrałem pomyślne wywołanie ze strony, ale zakodowałem je tak, aby powodowało błąd w pliku asp. Jak mogę odzyskać ten błąd z jQuery?
Na przykład:
cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
alert('successful : ' + html);
$("#result").html("Successful");
},
error: function (error) {
**alert('error; ' + eval(error));**
}
To błąd, którego nie rozumiem. W funkcji jaki parametr muszę podać, abym mógł następnie skorzystać z komunikatu o błędzie, który podniosłem na serwerze.
dataType
nie jestdatatype
..error
i.success
stają się ważniejsze, gdy zostały usunięte.Odpowiedzi:
Wymagane parametry w
error
funkcji Ajax tojqXHR, exception
i możesz jej używać jak poniżej:$.ajax({ url: 'some_unknown_page.html', success: function (response) { $('#post').html(response.responseText); }, error: function (jqXHR, exception) { var msg = ''; if (jqXHR.status === 0) { msg = 'Not connect.\n Verify Network.'; } else if (jqXHR.status == 404) { msg = 'Requested page not found. [404]'; } else if (jqXHR.status == 500) { msg = 'Internal Server Error [500].'; } else if (exception === 'parsererror') { msg = 'Requested JSON parse failed.'; } else if (exception === 'timeout') { msg = 'Time out error.'; } else if (exception === 'abort') { msg = 'Ajax request aborted.'; } else { msg = 'Uncaught Error.\n' + jqXHR.responseText; } $('#post').html(msg); }, });
DEMO FIDDLE
Parametry
jqXHR:
W rzeczywistości jest to obiekt błędu, który wygląda tak
Możesz również wyświetlić to we własnej konsoli przeglądarki, używając
console.log
wewnątrzerror
funkcji, takiej jak:error: function (jqXHR, exception) { console.log(jqXHR); // Your error handling logic here.. }
Używamy
status
właściwości tego obiektu, aby uzyskać kod błędu, na przykład jeśli otrzymamy status = 404, oznacza to, że nie można znaleźć żądanej strony. W ogóle nie istnieje. Na podstawie tego kodu statusu możemy przekierowywać użytkowników na stronę logowania lub cokolwiek wymaga naszej logiki biznesowej.wyjątek:
To jest zmienna łańcuchowa, która pokazuje typ wyjątku. Więc jeśli otrzymujemy błąd 404,
exception
tekst będzie po prostu „błąd”. Podobnie, możemy otrzymać „timeout”, „abort” jako inne teksty wyjątków.Tak więc, jeśli używasz jQuery 1.8 lub nowszego , będziemy musieli zaktualizować logikę funkcji sukcesu i błędu, taką jak: -
// Assign handlers immediately after making the request, // and remember the jqXHR object for this request var jqxhr = $.ajax("some_unknown_page.html") .done(function (response) { // success logic here $('#post').html(response.responseText); }) .fail(function (jqXHR, exception) { // Our error logic here var msg = ''; if (jqXHR.status === 0) { msg = 'Not connect.\n Verify Network.'; } else if (jqXHR.status == 404) { msg = 'Requested page not found. [404]'; } else if (jqXHR.status == 500) { msg = 'Internal Server Error [500].'; } else if (exception === 'parsererror') { msg = 'Requested JSON parse failed.'; } else if (exception === 'timeout') { msg = 'Time out error.'; } else if (exception === 'abort') { msg = 'Ajax request aborted.'; } else { msg = 'Uncaught Error.\n' + jqXHR.responseText; } $('#post').html(msg); }) .always(function () { alert("complete"); });
Mam nadzieję, że to pomoże!
źródło
.error
i.success
stały się ważniejsze, ponieważ zostały usunięteSpróbuj tego:
error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); }
Jeśli chcesz poinformować swój frontend o błędzie walidacji, spróbuj zwrócić json:
dataType: 'json', success: function(data, textStatus, jqXHR) { console.log(data.error); }
Twój skrypt ASP powinien zwrócić:
{"error": true}
źródło
Oto, jak wyciągasz błąd asp.
cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function (jqXHR, textStatus, errorThrown) { if (jqXHR.status == 500) { alert('Internal error: ' + jqXHR.responseText); } else { alert('Unexpected error.'); } }
źródło
error(jqXHR, textStatus, errorThrown)
http://api.jquery.com/jQuery.ajax/
źródło
cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function(data, errorThrown) { alert('request failed :'+errorThrown); }
źródło
używasz funkcji
error(error)
ale jquery w rzeczywistości szuka funkcji z trzema parametrami:
error(jqXHR, textStatus, errorThrown)
musisz dodać jeszcze dwa parametry.
TAKŻE: proszę spojrzeć na wszystkie powyższe komentarze, w których jest mowa o „przestarzałym” :)
$.ajax("www.stackoverflow.com/api/whatever", { dataType:"JSON" data: { id=1, name='example' } }).succes(function (result) { // use result }).error(function (jqXHR, textStatus, errorThrown) { // handle error });
źródło
function myMethod (err) { alert(err); }
a następnie nazwij ją wmyMethod ("something is wrong", 500, some_object)
ten sposób - To zadziała bez problemu. Zgodnie z Twoim oświadczeniem zadziała to tylko wtedy, gdy podpis metody tofunction myMethod (err, status, some_object)
. Zapomnij o powyższym przykładzie, podpissuccess
zdarzenia, które masz w odpowiedzi, jest faktycznie.success(data, status, xhr)
, ale jeśli potrzebujesz tylko wyniku, zwykle wiążemy go tak, jak.success (data)
i oba działają.Z jquery.com:
The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callback methods introduced injQuery 1.5 are deprecated as of jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.
Jeśli chcesz globalnych handlerów, możesz użyć:
.ajaxStart(), .ajaxStop(), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend()
źródło