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 yourprojects
@projects = Projects.all(current_user)
respond_to do |format|
format.html # index.html.erb
format.json { render :json => @projects }
end
end
I added the format.json line... in jquery i have:
$.ajax({url: '/projects/yourprojects', dataType: 'json'});
So that should work i thought. Instead the server is returning: "Template is missing" "Missing template ,,,, with {:locale=>[:en, :en], :handlers=>[:rjs, :rhtml, :builder, :rxml, :erb], :formats=>[:html]} in view paths"
do you need a template for a jsOn return? shouldn't the rails 3 app know how to format the json?
Routes File:
resources :projects do
collection do
get 'yourprojects'
end
end
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'});
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With