【问题标题】:Sending back an ajax error response in rails contoller在 Rails 控制器中发回 ajax 错误响应
【发布时间】:2014-06-05 20:36:33
【问题描述】:

我正在尝试向 rails 控制器中的 ajax 调用发回错误响应。

以下是我在控制器中的创建操作,即带有 ajax 调用的 javascript 函数。我需要发回一个错误响应,以便调用 ajax 请求的错误部分。我不知道如何让它工作。

  def create
    @company = Company.find(params["company_id"])
    @campaign = @company.campaigns.build(campaign_params)
    if @campaign.save
      redirect_to campaign_get_campaigns_path(@company)
    else
      respond_to do |format|
        format.json {render :json => {:error_message => @campaign.errors.full_messages, :success => false } }
      end
    end
  end


$(document).on('click', '#submitCampaign', function (e) {
    $form = $('.new_campaign');
    $.ajax({
        type: "POST",
        url: $form.attr('action'),
        data: $form.serialize(),
        dataType: "json"
    });
    error: function(data) {
        newfunction(data);
    }
});

我在终端得到的响应是:

Completed 200 OK in 269ms (Views: 0.2ms | ActiveRecord: 9.9ms)

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax controller


    【解决方案1】:

    您必须定义响应:status。在这种情况下是最好的选择422 Unprocessable entity

    format.json { render :json => { :error_message => @campaign.errors.full_messages }, :status => :unprocessable_entity }
    

    【讨论】:

    • 我仍然收到 POST localhost:3004/companies/100/campaigns 422 (OK) ...有什么想法吗?
    • 422(确定)?这很奇怪。你不应该得到这种类型的回应。也许你可以试试:status => 422,但它应该做同样的事情。
    • $form.attr('action') 中的地址如何?
    • @edariedlless "/companies/100/campaigns" 它遇到了失败格式块,但由于某种原因它没有发回错误
    • 所以它得到了javascript ajax调用的错误块?尝试在错误块中添加带有console.log(data); 的行并告诉我它在浏览器控制台上打印的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多