将我重定向到默认错误页面上jQuery .ajax()错误:

时间:2011-11-22 09:32:56

标签: jquery ruby ajax sinatra

我写了一个小红宝石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 个答案:

答案 0 :(得分:3)

查看默认的ajax设置,因此您不必为每个Ajax请求执行此操作。 http://api.jquery.com/jQuery.ajaxSetup/

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

如果您有ajax请求并且您的数据库不可用,则不会出现Ajax错误,因为仍然可以调用该页面。也许你必须检查成功页面上的响应,如果它包含“ERROR”或其他什么?或者将标头代码更改为另一个,然后将其更改为200,以便调用Ajax请求的错误。

答案 1 :(得分:0)

试试这个:

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