【问题标题】:Rails 3 Unobtrusive JavaScript - handle JSON responseRails 3 Unobtrusive JavaScript - 处理 JSON 响应
【发布时间】:2011-03-16 09:59:25
【问题描述】:

我有一个简单的搜索表单,看起来像:

app/views/search/index.html.erb

<%= form_for @search, :as => :search, :remote => true, :url => {:action => "query"}, :html => {:id => 'search-form'} do |f| %>
  ...
<% end %

*app/controllers/search_controller.rb*

def index
  @search = SearchCriteria.new
end

def query
  @search = SearchCriteria.new(params[:search])

  unless @search.valid?
    respond_to do |format|
      format.json { render :json => {:error => 'validation failed'}, :status => 400 }
    end
    return
  end

  # otherwise, perform search...

  render :json => @results
end

public/javascripts/application.js

$(function() {
    $('search-form')
        .bind('ajax:success', function(e, data, status, xhr) {
            console.log("data=" + data);
        })
        .bind('ajax:error', function(e, xhr, status, error) {
            console.log("error json: " + xhr.responseText);
        });
})

我遇到的问题是,当我在 JSON 中呈现错误的 400 时,如何在 ajax:error 处理程序中获取该 JSON?使用萤火虫我可以看到数据/消息似乎存储在 xhr.responseText 作为字符串,而不是 JSON。 'ajax:success' 处理程序似乎在 'data' 参数中获取了实际的 JSON 数据。

我正在使用 Rails 3 + jQuery (UJS)。

【问题讨论】:

    标签: jquery ruby-on-rails-3


    【解决方案1】:

    您可以使用jQuery.parseJSONxhr.responseText 转换为JSON 对象:

    http://api.jquery.com/jQuery.parseJSON/

    console.log("error json: ",  jQuery.parseJSON(xhr.responseText));
    

    【讨论】:

    • 非常好...我只是在回到这里查看您的答案之前发现了这一点。另一个侧面问题。我有点喜欢用于显示错误和/或闪存消息的默认/标准 rails 视图。你知道我在哪里可以找到该代码吗?我想使用他们的 HTML/CSS 来显示我的错误。
    • 对不起,我不熟悉 Rails。
    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多