ok, rails 3 new developer here.
I want my jquery to be able to get a json object from the rails 3 application for projects. Here is my controller.
def yo
You can set the Accept: application/json
header for real REST, or you can add the format to the URL for quick hackery:
$.ajax({url: '/projects/yourprojects.json', dataType: 'json'});
:formats=>[:html]
That says the server is thinking that html
is being requested. Try adding a .json
to your path (and possible route) and that will force the format. TO make that would would need a route something like this:
map.your_projects '/projects/yourprojects.:format',
:controller => 'projects',
:action => 'yourprojects'
Somehow, someway, the params[:format]
should be "json"
for this request so the format handlers can do the right thing.
This is not issue of Rails but rather AJAX / jQuery not sending Accept header: Try this:
$.ajax({
url: 'url_to_action', dataType: "json",
beforeSend : function(xhr){
xhr.setRequestHeader("Accept", "application/json")
},
success : function(data){
//.. do something with data
},
error: function(objAJAXRequest, strError, errorThrown){
alert("ERROR: " + strError);
}
}
);
If all your AJAX requests expect JSON, then you can set header globally:
$.ajaxSetup({
dataType: 'json',
'beforeSend' : function(xhr){
xhr.setRequestHeader("Accept", "application/json")
}
});
Other option would be adding .json
to path or data:{format: 'json'}
to $.ajax
hash of options. Rails supports format path suffixes by default for resoures
routing. Just try rake routes
to see.