respond_to format.json not being called

Hi all,

I'm submitting a form using jQuery, but in the respond_to block only the
format.html action is called.

This is the javascrip:

send_button.on('click', function(){
  var form = $(this).closest('.modal').find('form');

  $.post('/messages', form.serialize(),
    function(data, status, xhr){
      console.log(data);
    });
  );
});

However, when this hits the controller, 'console.log(data)' outputs html
(either root_url or the validation array).

The code in the controller looks like:

respond_to do |format|
  if @m.save
    format.html {redirect_to root_url, :notice=>"Message sent"}
    format.json {render :json=>@m, :status=>:created, :location=>@m}
  else
    format.html {render :action=>:new}
    format.json {render :json=>@m.errors,
:status=>:unprocessable_entity}
  end
end

Obviously, I'm not using link_to_function or anything, so I'm wondering
if the request format header isn't being set properly without using the
built-in rails functions?

Any help would be appreciated.

Many thanks.

Hi all,

I'm submitting a form using jQuery, but in the respond_to block only the
format.html action is called.

This is the javascrip:

send_button.on('click', function(){
var form = $(this).closest('.modal').find('form');

$.post('/messages', form.serialize(),
   function(data, status, xhr){

  You call pure Javascript request.

     console.log(data);
   });
);
});

However, when this hits the controller, 'console.log(data)' outputs html
(either root_url or the validation array).

The code in the controller looks like:

respond_to do |format|
if @m.save
   format.html {redirect_to root_url, :notice=>"Message sent"}
   format.json {render :json=>@m, :status=>:created, :location=>@m}

  format.json - is NOT javascript hook,

  use format.js

  or old approach:
  if request.xhr?
    do action
  end