显示ajax调用的错误消息的最佳方式是什么?

时间:2016-01-08 14:43:21

标签: javascript jquery ruby-on-rails ajax

我有以下问题:

我有一个文本框,我在点击输入按钮时获取文本框的值,我想捕获没有名称的错误。所以我把它添加到我的模型中:

validates :name, presence: true

在我的控制器中,我只更改了保存成功后应该发生的事情:

def create
  @role = Role.new(role_params)

  respond_to do |format|
    if @role.save
      format.js { render :created }
    else
      format.json { render json: @role.errors, status: :unprocessable_entity }
    end
  end
end

我的JavaScript文件有这个功能:

$(function(){
  $("body").on("keyup", "#role_name", function(e){
    if ( e.which == 13 ) {
      role_name = $("#role_name").val();
      $.ajax({
      type: "POST",
      dataType: "script",
      url: '/roles',
      data: {role: {name: role_name} },
      success: function(){
        $("#role_name").val("");
        $("#alert-new-role").replaceWith("<div id='alert-new-role' class='alert alert-success col-xs-10 col-xs-offset-1'><strong>role created!</strong></div>");
        }
      }).fail(function(){
        $("#alert-new-role").replaceWith("<div id='alert-new-role' class='alert alert-danger col-xs-10 col-xs-offset-1'><strong>name can't be empty!</strong></div>");

      });
    }
  });
})

这实际上有效,但我的错误信息是硬编码的。我是否应该添加第二个验证规则,我无法确定究竟是什么原因导致错误。

Firebug向我展示了由控制器创建的JSON,但不知怎的,我无法从jQuery中的.fail函数中访问它。

我检查了所有4个参数但没有包含我的错误信息。

我找到了几个应该如何做的例子,但不知怎的,我无法重现它。

如果我可以访问JSON,那么在rails中渲染部分并将其传递回.fail函数也是一个想法。

1 个答案:

答案 0 :(得分:1)

这是我使用的,应该很容易扩展到error上的一系列html警告和一个switch语句,或只是一个带有错误插入值的html字符串:

  $.ajax({
    type: "POST",
    url: "page.php",
    data: dataString,
    success: function() {},
    error: function(xhr, status, error) {
      var err = eval("(" + xhr.responseText + ")");
      console.log(err.Message);
      console.log('xhr: ');
      console.log(xhr);
      console.log('status: ' + status);
      console.log('error: ' + error);
    }
  });

您可以通过错误功能中的xhr对象访问所需的数据,如下所示(右键单击并在新选项卡中打开图像以获得更好的外观):

enter image description here