обработка ошибок в ajaxcall - PullRequest
0 голосов
/ 11 марта 2010

У меня есть веб-сайт, на котором вызов ajax будет получать данные Json из действия Asp.Net-Mvc.

Теперь я пытаюсь обработать ошибки имплантата в нем.

Но я застрял в том, как это сделать.

Самым простым способом, который я нашел, было обнаружение исключений в действии контроллера и возвращение объекта Json с сообщением об ошибке. А затем в функции ajax succes я могу вывести сообщение об ошибке, если его исключение.

Но я не уверен, что это лучший способ, поэтому я попытался использовать функцию ошибки вызова ajax.

мой код выглядит примерно так:

$.ajax(
    {
       type: "POST",
       url: "/home/geterror",
       data: "",
       dataType: "json",
       success: function(result)
       {
           //do something

       },
       error: function(XMLHttpRequest, textStatus, errorThrown)
       {
            alert(XMLHttpRequest.responseText + " "+ XMLHttpRequest.status +" "+ textStatus +" "+ errorThrown);   
       }
    });

Я увидел, что XMLHttpRequest.responseText - это стандартная страница ошибок asp.net с моим сообщением об ошибке в заголовке. errorThrown всегда неопределен. Теперь я пытаюсь получить заголовок из XMLHttpRequest.responseText. Но я не знаю, как это сделать. (все, что я пытался, не удалось ..) Так что, если у кого-то есть предложение или лучший способ обработки ошибок с помощью Ajax-вызовов ...

Спасибо, Bruno

Ответы [ 3 ]

3 голосов
/ 11 марта 2010

Намного лучше обрабатывать ошибки внутри обратного вызова error. Чтобы jQuery обнаружил ошибку, вам нужно установить код ответа HTTP на 4xx или 5xx Я не знаю ASP.NET, так что терпите меня, но вам нужно что-то для этого.

Response.code = '401'
Response.text = JSON({ message: 'An error occurred.', ... })

На стороне клиента анализировать ответ JSON .

$.ajax({
    ...
    error: function(request, status, error) {
        var result = JSON.parse(request.responseText);
        alert(result.message);
    });
});
3 голосов
/ 11 марта 2010

Бруно, я думаю, вы должны провести различие здесь; у вас есть пользовательские или ожидаемые ошибки, которые вы хотите показать пользователям, например, недопустимое значение при условии, что вы должны сказать пользователю «сэр, вы не можете сделать это, потому что бла-бла», а с другой стороны, у вас есть другие неожиданные ошибки, например Например ошибка в вашем коде, которая вызывает некоторые нежелательные исключения, такие как, например, нарушение FK во вставке. Мое предложение состоит в том, чтобы обрабатывать последние глобально, вы можете настроить запросы ajax запросов, чтобы иметь некоторое общее поведение, например, ajaxSetup . Таким образом вы настраиваете общий обработчик ошибок (статус 500). В случае, если у вас есть «ожидаемая» ошибка (первый случай в моем примере), вы должны вернуть специальный объект, как показал Дарин в своем ответе, и обработать его в обратном вызове успеха, в конце концов, это допустимый сценарий, и вы должны обработать его. это как таковое.

2 голосов
/ 11 марта 2010
public ActionResult Index()
{
    try
    {
        // Do something
        return Json(new { status = true, errorMessage = "" });
    }
    catch (SomeSpecialExceptionYouWantToHandle e)
    {
        return Json(new { status = false, errorMessage = e.Message });
    }
}

И вызов ajax:

$.post('/home/index', { }, function(result) {
    if (result.status) {
        alert('success');
    } else {
        alert(result.errorMessage);
    }
}, 'json');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...