Перенаправить меня на страницу ошибок по умолчанию при jQuery .ajax () error: - PullRequest
2 голосов
/ 22 ноября 2011

Я написал небольшое приложение ruby ​​Sinatra.Время от времени выдается ошибка (например, отсутствует соединение с базой данных).Однако страница индекса по умолчанию всегда работает (подключение к базе данных не требуется).

Я использовал jQuery для обработки запроса, который инициирует создание данных.Но когда возникает внутренняя ошибка, я бы хотел показать страницу ошибки по умолчанию.Это не работает, потому что jQuery создает запрос и просто игнорирует ошибку (поэтому ничего не происходит, когда база данных недоступна).Мой код выглядит примерно так:

$(document).ready(function() {  

  $("form").bind("submit", function(event) {
    event.preventDefault();

    $.ajax({
        type:"POST",
        url:"/new",
        data:$("#form").serialize(),
        dataType:"json",
        success:function(data){
         // handling of input data
        },
        error:function(xhr, ajaxOptions, thrownError){ 
          // show default error page
        }
      });
  });
});

Мне удалось добиться того, чего я хотел, с помощью этого:

    error:function(xhr, ajaxOptions, thrownError){ 
      alert something;
    }

Но я полагаю, это просто работает из-за синтаксической ошибкисинтаксис будет предупрежден («что-то»);)

Есть ли правильный способ перенаправить на страницу ошибки по умолчанию?

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

Посмотрите на настройки Ajax по умолчанию, так что вам не нужно делать это для каждого запроса Ajax, который вы делаете.http://api.jquery.com/jQuery.ajaxSetup/

$.ajaxSetup({
    error : function(){
        document.location = "/errorpage";
    }
 });

Если у вас есть запрос ajax и ваша база данных недоступна, ошибка Ajax отсутствует, поскольку страницу все еще можно вызвать.Может быть, вы должны проверить ответ на странице успеха, если он содержит «ОШИБКА» или что-то?Или измените код заголовка на другой, отличный от 200, чтобы вызвать ошибку Ajax-запроса.

0 голосов
/ 22 ноября 2011

Попробуйте это:

error:function(xhr, ajaxOptions, thrownError){ 
    // show default error page
    window.location.assign("error.html");
}
...