BeachRunnerFred
BeachRunnerFred

Reputation: 18558

$.ajax request in Rails 4 app doesn't render view

I'm new to Rails and I'm trying to submit model data to a controller method, from javascxript, and render the list of results...

function submitResults() {
  resultURL = "/result";
  resultData = JSON.stringify(results);
  $.ajax({
    type: "POST",
    url: resultURL,
    data: { results: resultData},
    contentType: "application/html",
    dataType: "html"
  });  

The server shows the controller method is executed and the view is rendered...

Started POST "/result" for 127.0.0.1 at 2014-11-14 17:36:32 -0600
Processing by ResultsController#create as HTML
  Result Load (0.7ms)  SELECT "results".* FROM "results"
  Rendered results/index.html.erb within layouts/application (366.0ms)
Completed 200 OK in 4722ms (Views: 408.3ms | ActiveRecord: 1.3ms)

but the browser doesn't render the view. Here's my create method that's triggered by the $.ajax call...

def create
  result = Result.new(result_params)
  result.save
  @results = Result.all
  respond_to do |format|
    format.html { render :index }
  end
end

Why doesn't the browser load the index view?

Upvotes: 1

Views: 1084

Answers (1)

AOG
AOG

Reputation: 541

You ajax call is not doing anything with the response, define callback functions for it. E.g.:

$.ajax({
  type: "POST",
  url: resultURL,
  data: { results: resultData},
  contentType: "application/html",
  dataType: "html"
}).done(function(response) {
  //attach the response somewhere in the DOM.
});

Check the AJAX doc for all callbacks.

BTW, you usually do not want to load a whole html page through an ajax call. Seems like the page you are rendering includes everything (seems to be using the default layout). In such a case, making AJAX calls can have no benefits (and make things harder) and you might want to do the post through an html form.

Upvotes: 1

Related Questions