开发者

Rails 3 Unobtrusive JavaScript - handle JSON response

开发者 https://www.devze.com 2023-02-16 23:01 出处:网络
I have a simple search form that looks something like: app/views/search/index.html.erb <%= form_for @search, :as => :search, :remote => true, :url => {:action => \"query\"}, :html =&g

I have a simple search form that looks something like:

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);
        });
})

The problem I have is that wh开发者_开发技巧en I render a 400 with an error in JSON, how can I get that JSON in the ajax:error handler? Using firebug I could see that the data/message seems to be stored in xhr.responseText as a String, not as JSON. The 'ajax:success' handler seems to get the actual JSON data in the 'data' parameter.

I'm using Rails 3 + jQuery (UJS).


You can use jQuery.parseJSON to turn the xhr.responseText into a JSON object:

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

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

精彩评论

暂无评论...
验证码 换一张
取 消