JQuery Ajax səhvini idarə edən, xüsusi istisna mesajlarını görüntüləyən

JQuery AJAX səhv başlığında xəbərdarlıq kimi xüsusi istisnalar mesajlarını göstərməyin bir yolu varmı?

Məsələn, Struts ilə server tərəfində istisna etmək istəyirsinizsə, throw new ApplicationException("User name already exists"); Bu mesajı ("istifadəçi adı zaten var") tutmak istiyorum jQuery AJAX hata mesajında.

 jQuery("#save").click(function () { if (jQuery('#form').jVal()) { jQuery.ajax({ type: "POST", url: "saveuser.do", dataType: "html", data: "userId=" + encodeURIComponent(trim(document.forms[0].userId.value)), success: function (response) { jQuery("#usergrid").trigger("reloadGrid"); clear(); alert("Details saved successfully!!!"); }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } }); } }); 

Səhv barədə xəbərdarlıq etdiyim ikinci xəbərdarlıqda, undefined və status kodu 500-dir.

Səhv olduğum yerə əmin deyiləm. Bu problemi həll etmək üçün nə edə bilərəm?

652
set 18 dekabr 2008-12-18 15:06 '08 at 3:06 pm 2008-12-18 15:06
@ 20 cavab

Response.StatusCode dən 200-dən başqa bir şeyə Response.StatusCode etdiyinizə əmin olun. İstifadəsi mesajınızı Response.Write istifadə edərək yazın, sonra ...

 xhr.responseText 

.. javascriptinizdə.

324
16 янв. Sprintstar dan 16 yanvar cavab 2009-01-16 17:25 '09 at 17:25 'da 2009-01-16 17:25

Controller:

 public class ClientErrorHandler : FilterAttribute, IExceptionFilter { public void OnException(ExceptionContext filterContext) { var response = filterContext.RequestContext.HttpContext.Response; response.Write(filterContext.Exception.Message); response.ContentType = MediaTypeNames.Text.Plain; filterContext.ExceptionHandled = true; } } [ClientErrorHandler] public class SomeController : Controller { [HttpPost] public ActionResult SomeAction() { throw new Exception("Error message"); } } 
border=0

Ssenari bax:

 $.ajax({ type: "post", url: "/SomeController/SomeAction", success: function (data, text) { //... }, error: function (request, status, error) { alert(request.responseText); } }); 
195
10 мая '10 в 10:16 2010-05-10 10:16 cavab AlexMAS tərəfindən 10 may 10: 10-da verilir. 2010-05-10 10:16

ServerSide:

  doPost(HttpServletRequest request, HttpServletResponse response){ try{ //logic }catch(ApplicationException exception){ response.setStatus(400); response.getWriter().write(exception.getMessage()); //just added semicolon to end of line } } 

müştəri:

  jQuery.ajax({// just showing error property error: function(jqXHR,error, errorThrown) { if(jqXHR.status alert(jqXHR.responseText); }else{ alert("Something went wrong"); } } }); 

Ümumi Ajax Error Handling

Bütün ajax istekleri üçün bir ümumi hata işleme yapmam gerekiyorsa. AjaxError işleyicisini quraşdıracağıq və html məzmununun üst hissəsindəki errorcontainer adlı bir divdə səhv göstərəcəyəm.

 $("div#errorcontainer") .ajaxError( function(e, x, settings, exception) { var message; var statusErrorMap = { '400' : "Server understood the request, but request content was invalid.", '401' : "Unauthorized access.", '403' : "Forbidden resource can't be accessed.", '500' : "Internal server error.", '503' : "Service unavailable." }; if (x.status) { message =statusErrorMap[x.status]; if(!message){ message="Unknown Error \n."; } }else if(exception=='parsererror'){ message="Error.\nParsing JSON Request failed."; }else if(exception=='timeout'){ message="Request Time out."; }else if(exception=='abort'){ message="Request was aborted by the server"; }else { message="Unknown Error \n."; } $(this).css("display","inline"); $(this).html(message); }); 
91
25 февр. Cavab Sanjeev Kumar Dangi verildi 25 fevral. 2012-02-25 20:09 '12 at 8:09 pm 2012-02-25 20:09

AnswerText-i JSON-ə çevirmək lazımdır. JQuery istifadə:

 jsonValue = jQuery.parseJSON( jqXHR.responseText ); console.log(jsonValue.Message); 
72
13 апр. Sidneyin aprelin 13-də verdiyi cavabı 2011-04-13 18:49 '11 at 18:49 2011-04-13 18:49

Asp.net ünvanını axtararkən, bu bir səhv başlığı başlığını qaytarır:

Mən bütün formatErrorMessage faylını yazmadım, amma bunu çox faydalı hesab edirəm.

 function formatErrorMessage(jqXHR, exception) { if (jqXHR.status === 0) { return ('Not connected.\nPlease verify your network connection.'); } else if (jqXHR.status == 404) { return ('The requested page not found. [404]'); } else if (jqXHR.status == 500) { return ('Internal Server Error [500].'); } else if (exception === 'parsererror') { return ('Requested JSON parse failed.'); } else if (exception === 'timeout') { return ('Time out error.'); } else if (exception === 'abort') { return ('Ajax request aborted.'); } else { return ('Uncaught Error.\n' + jqXHR.responseText); } } var jqxhr = $.post(addresshere, function() { alert("success"); }) .done(function() { alert("second success"); }) .fail(function(xhr, err) { var responseTitle= $(xhr.responseText).filter('title').get(0); alert($(responseTitle).text() + "\n" + formatErrorMessage(xhr, err) ); }) 
33
13 февр. Cavab Sam Jones tərəfindən 13 Fevral verildi 2013-02-13 15:30 '13 saat 15:30 'da 2013-02-13 15:30

Bu mənim etdiyim işlərdir və hələ də MVC 5 tətbiqində işləyir.

Kontrolörün geri dönüş növü ContentResult'dur.

 public ContentResult DoSomething() { if(somethingIsTrue) { Response.StatusCode = 500 //Anything other than 2XX HTTP status codes should work Response.Write("My Message"); return new ContentResult(); } //Do something in here// string json = "whatever json goes here"; return new ContentResult{Content = json, ContentType = "application/json"}; } 

Və müştəri tərəfində, bu ajax funksiyası kimi görünür

 $.ajax({ type: "POST", url: URL, data: DATA, dataType: "json", success: function (json) { //Do something with the returned json object. }, error: function (xhr, status, errorThrown) { //Here the status code can be retrieved like; xhr.status; //The message added to Response object in Controller can be retrieved as following. xhr.responseText; } }); 
20
19 мая '16 в 1:23 2016-05-19 01:23 Cavab Cengiz Araz 19 may '16 'da 1:23 2016-05-19 01:23' də verilir

Kimsə burada olduğu kimi, 2016-ci ildə olduğu kimi cavab üçün istifadə edin .fail() səhvləri idarə etmək, çünki .error() jQuery 3.0

 $.ajax( "example.php" ) .done(function() { alert( "success" ); }) .fail(function(jqXHR, textStatus, errorThrown) { //handle error here }) 

Ümid edirəm ki, bu kömək edir

15
13 дек. Şagird tərəfindən verilmiş cavab 13 dekabr 2016-12-13 20:41 '16 saat 20:41 'da 2016-12-13 20:41

Mənə göründü ki, bu, gözəl idi, çünki mən serverdən göndərdiyim mesajı hazırlaya və istifadəçiyə stacktrace olmadan dostluq mesajı göstərə bilərdim ...

 error: function (response) { var r = jQuery.parseJSON(response.responseText); alert("Message: " + r.Message); alert("StackTrace: " + r.StackTrace); alert("ExceptionType: " + r.ExceptionType); } 
14
02 дек. Cavab crazyDiamond verilir 02 Dekabr. 2011-12-02 00:33 '11 at 0:33 2011-12-02 00:33

Ümumi / Təkrar Çözüm

Bu cavab gələcəkdə bu problemlə qarşılaşanların hamısına aiddir. Həll iki şeydən ibarətdir:

  • ModelStateException serverdə tamamlandıqda (dövlət statusu hesabatının statusu yoxlama səhvləri, məlumatların açıqlamasını istifadə edərkən və güclü, yazılmış nəzarətçi fəaliyyət parametrlərini istifadə edərkən) xüsusi bir ModelStateException istisnası
  • Istifadəçi nəzarət səhvində xüsusi bir istisna tutan HandleModelStateExceptionAttribute bir model vəziyyət səhvi ilə HTTP səhv vəziyyətini qaytarır

JQuery Ajax zəngləri üçün successerror işləyiciləri ilə tam potensialını istifadə etmək üçün optimal infrastruktur təmin edir.

Müştəri Məcəlləsi

 $.ajax({ type: "POST", url: "some/url", success: function(data, status, xhr) { // handle success }, error: function(xhr, status, error) { // handle error } }); 

Server kodu

 [HandleModelStateException] public ActionResult Create(User user) { if (!this.ModelState.IsValid) { throw new ModelStateException(this.ModelState); } // create new user because validation was successful } 

Bütün bu problem blogunuzda ətraflı təsvir olunur, burada bu proqramı işə salmaq üçün bütün kodları tapa bilərsiniz.

13
05 мая '11 в 11:27 2011-05-05 11:27 Robert Koritnik 05 May '11 'də 11:27' də cavab verdi 2011-05-05 11:27

Bu, ehtimal ki, qeyd edilməmiş JSON sahələrinin adları ilə bağlıdır.

JSON strukturunu dəyişdirin:

 {welcome:"Welcome"} 

in

 {"welcome":"Welcome"} 
7
14 авг. Cavab verildi 14 Avqust. 2010-08-14 16:01 '10 at 16:01 2010-08-14 16:01

Hesab edirəm ki, Ajax cavab işləyicisi səhv olub olmadığını yoxlamaq üçün HTTP statusu kodunu istifadə edir.

Beləliklə, əgər yalnız bir Java istisnası server yan kodunuzda atarsanız , ancaq HTTP cavabında jQuery 500 status kodunu (və ya bu halda, XMLHttpRequest , bəlkə də) ehtiva edirsə, sadəcə hər şeyin məqsədi olduğunu düşünürəm.

ASP.NET-də oxşar bir problem olduğumu söyləyirəm, çünki ArgumentException kimi bir şey atdığımda ("Nə edəcəyimi bilmirəm ..."), lakin səhv işləyən işə düşməyib.

Sonra bir Response.StatusCode olub-olmamaqla Response.StatusCode ı 500 və ya 200-ə təyin etdim.

5
19 дек. Cavab 19 dekabrda Vitor Silva tərəfindən verilir . 2008-12-19 17:11 '08 at 17:11 2008-12-19 17:11

jQuery.parseJSON uğur və səhv üçün faydalıdır.

 $.ajax({ url: "controller/action", type: 'POST', success: function (data, textStatus, jqXHR) { var obj = jQuery.parseJSON(jqXHR.responseText); notify(data.toString()); notify(textStatus.toString()); }, error: function (data, textStatus, jqXHR) { notify(textStatus); } }); 
5
12 авг. cavab Nuri YILMAZ 12 avqustda verildi . 2011-08-12 01:18 '11 at 1:18 'da 2011-08-12 01:18

 success: function(data){ // data is object send form server // property of data // status type boolean // msg type string // result type string if(data.status){ // true not error $('#api_text').val(data.result); } else { $('#error_text').val(data.msg); } } 
4
16 марта '18 в 6:33 2018-03-16 06:33 Cavab Wara Haii tərəfindən 16 Mart 18:18 'də veriləcək, 2018-03-16 06:33
 $("#save").click(function(){ $("#save").ajaxError(function(event,xhr,settings,error){ $(this).html{'error: ' (xhr ?xhr.status : '')+ ' ' + (error ? error:'unknown') + 'page: '+settings.url); }); }); 
4
06 марта '14 в 21:07 2014-03-06 21:07 Cavab yazılıb ibrahim ozboluk Mart 06 '14 da 21:07 2014-03-06 21:07

Xhr obyektində yaradılmış istisnanın bir JSON obyekti var. Yalnız istifadə edin

 alert(xhr.responseJSON.Message); 

JSON obyekti iki digər xüsusiyyətləri təmin edir: "ExceptionType" və "StackTrace"

4
23 февр. Cavab 23 fevralda Edika tərəfindən verilir. 2017-02-23 13:33 '17 də 13:33 2017-02-23 13:33

Istifadə edərək serverda yeni bir istisna atın:

Response.StatusCode = 500

Response.StatusDescription = ex.Message ()

Hesab edirəm ki, StatusDescription Ajax zənginə qayıdır ...

Məsələn:

  Try Dim file As String = Request.QueryString("file") If String.IsNullOrEmpty(file) Then Throw New Exception("File does not exist") Dim sTmpFolder As String = "Temp\"  Session.SessionID.ToString() sTmpFolder = IO.Path.Combine(Request.PhysicalApplicationPath(), sTmpFolder) file = IO.Path.Combine(sTmpFolder, file) If IO.File.Exists(file) Then IO.File.Delete(file) End If Catch ex As Exception Response.StatusCode = 500 Response.StatusDescription = ex.Message() End Try 
3
18 янв. Steffan tərəfindən 18 yanvarda cavablandı 2010-01-18 21:05 '10 at 21:05 2010-01-18 21:05

Bu sualın verildiyi ildən çox illər keçmiş olmasına baxmayaraq, xhr.responseText cavab olaraq hələ də xhr.responseText . O məni simli şəkildə aşağıdakı formatda qaytarıb:

 "{"error":true,"message":"The user name or password is incorrect"}" 

Mən mütləq istifadəçiləri göstərmək istəmirəm. Aradığım şey belədir:

 alert(xhr.responseJSON.message); 

xhr.responseJSON.message , istifadəçilərə göstərilə biləcək bir Json obyektindən dəqiq mesaj verir.

2
24 июня '16 в 5:05 2016-06-24 05:05 cavab 24 iyun 'da 5:05' də Saketə verilir
 $("#fmlogin").submit(function(){ $("#fmlogin").ajaxError(function(event,xhr,settings,error){ $("#loading").fadeOut('fast'); $("#showdata").fadeIn('slow'); $("#showdata").html('Error please, try again later or reload the Page. Reason: ' + xhr.status); setTimeout(function() {$("#showdata").fadeOut({"opacity":"0"})} , 5500 + 1000); // delays 1 sec after the previous one }); }); 

Hər hansı forma varsa, təsdiqləyin

yalnız kodun qalan hissəsini istifadə edin

 $("#fmlogin").validate({... 

... ... });

1
09 марта '14 в 20:31 2014-03-09 20:31 cavab Monzur 09 mart '14 saat 20:31 'də verilir 2014-03-09 20:31

Öncelikle web.config <serviceDebug includeExceptionDetailInFaults = "True" /> ayarlamalıyız:

 <serviceBehaviors> <behavior name=""> <serviceMetadata httpGetEnabled="true" /> **<serviceDebug includeExceptionDetailInFaults="true" />** </behavior> </serviceBehaviors> 

Bununla yanaşı, jquery səviyyəsində, səhvən bir hissədə bu kimi bir istisna olan səhv cavabını təhlil etmək lazımdır:

 .error(function (response, q, t) { var r = jQuery.parseJSON(response.responseText); }); 

Sonra r.Message istifadə edərək, istisna mətni göstərə bilərsiniz.

Tam koda baxın : http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html

0
09 мая '12 в 11:41 2012-05-09 11:41 Cavab verilir Avinash 09 May '12 at 11:41 2012-05-09 11:41

Bu funksiya əsasən unikal təsadüfi API düyməsini yaradır və əgər olmasa, səhv mesajı ilə bir pop-up informasiya qutusu görünür.

İzləmə səhifəsində:

 <div class="form-group required"> <label class="col-sm-2 control-label" for="input-storename"><?php echo $entry_storename; ?></label> <div class="col-sm-6"> <input type="text" class="apivalue" id="api_text" readonly name="API" value="<?php echo strtoupper(substr(md5(rand().microtime()), 0, 12)); ?>" class="form-control" /> <button type="button" class="changeKey1" value="Refresh">Re-Generate</button> </div> </div> <script> $(document).ready(function(){ $('.changeKey1').click(function(){ debugger; $.ajax({ url :"index.php?route=account/apiaccess/regenerate", type :'POST', dataType: "json", async:false, contentType: "application/json; charset=utf-8", success: function(data){ var result = data.sync_id.toUpperCase(); if(result){ $('#api_text').val(result); } debugger; }, error: function(xhr, ajaxOptions, thrownError) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } }); }); }); </script> 

Denetleyiciden:

 public function regenerate(){ $json = array(); $api_key = substr(md5(rand(0,100).microtime()), 0, 12); $json['sync_id'] = $api_key; $json['message'] = 'Successfully API Generated'; $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } 

Opsiyonel geri çağırma parametresi, load () metodu tamamlandığında yürütülecek geri çağırma funksiyasını belirtir. Geri çağırma funksiyası müxtəlif parametrlərə malik ola bilər:

Növü: Function (jqXHR jqXHR, String textStatus, String errorThrown)

Sorğu başarısızsa zəng etmək üçün funksiya. Bu funksiya üç arqument qəbul edir: jqXHR obyekti (jQuery 1.4.x, XMLHttpRequest), meydana gələn səhvin növünü izah edən bir simli və meydana gəldiyi halda isteğe bağlı bir istisna obyekti. İkinci arqument ("sıfır istisna olmaqla") üçün mümkün dəyərlər "zaman aşımı", "səhv", "ara vermə" və "parsererror" olur. Bir HTTP hatası oluştuğunda, errorThrown HTTP statüsünün "Not Found" və ya "Internal Server Error" kimi mətn hissəsini alır. JQuery 1.5 ilə başlayaraq, səhv parametr funksiyaların bir sıra qəbul edə bilər. Hər funksiya öz növbəsində çağırılacaq. Qeyd Bu işəgötürən cross-domain skriptinə və cross-domain JSONP sorğularına çağırılmır.

0
21 февр. Cavab Nishanth 21 fevralda verilir. 2018-02-21 16:04 '18 at 4:04 pm 2018-02-21 16:04

tags ilə əlaqədar digər suallar və ya bir sual