2016-05-12 2 views
0

Ошибка AJAX возвращается как Успех. Как вернуть ошибку JSON из ASP.NET MVC? Не могли бы вы рассказать мне, что я делаю неправильно? Спасибо.Ошибка AJAX возвращается как Успех

[HttpPost] 
    public JsonResult Register(int EventID) 
    { 
     try 
     { 
      // code 
      return Json(new { success = true, message = "Thank you for registering!" }); 
     } 
     catch (Exception ex) 
     { 
      return Json(new { success = false, message = ex.Message }); 
     } 
    } 


       $.ajax({ 
        url: "@Url.Action("Register", "Home")", 
        type: "post", 
        dataType: "json", 
        contentType: "application/json", 
        data: JSON.stringify(postData), 
        success: function(data) { 
        }, 
        error: function (data) { 
        } 
       }); 
+0

Что вы подразумеваете под AJAX Error? В чем заключается ответ? –

+2

Потому что вы поймали ошибку на сервере и вернули действительный json (а не ошибку). Если вы хотите, чтобы код 'error:' был удален, тогда не поймайте исключение –

ответ

2

error функция запускается на выполнение только тогда, когда код ответа HTTP не HTTP 200 Ready. Вы обрабатываете ошибку на стороне сервера и возвращаете правильный ответ, который будет вызван функцией success в вызове AJAX. Вместо этого следует использовать переменную status в вашем JSON и обработать его на стороне клиента:

success: function(data) { 
    if (typeof data == "string") 
    data = JSON.parse(data); 
    if (data.success) { 
    // Code if success. 
    } else { 
    // Code if error. 
    } 
}, 

Из docs (прокрутите вниз до раздела error):

A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout" , "error" , "abort" , and "parsererror" . When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note:This handler is not called for cross-domain script and cross-domain JSONP requests. This is an Ajax Event .

2

Метод ошибки Ajax ударил только когда вы получите Ошибка желтого экрана на стороне сервера. В вашем сценарии вы обрабатываете ошибку, используя try catch и возвращающий действительный ответ. Таким образом, это не считается ошибкой, а действительным ответом. Удалите попытку поймать, чтобы Ajax запустил событие ошибки, иначе, если вы хотите показать фактическое сообщение об ошибке с сервера, вы можете использовать свойство success, чтобы решить, был ли ответ успешным или ошибка, его подобно тому, что Праввей уже опубликовал в своем ответе.