在rails应用程序中输出jSON

好的,rails 3新开发者在这里。

我希望我的jquery能够从rails 3应用程序中获取项目的json对象。 这是我的控制器。

def yourprojects @projects = Projects.all(current_user) respond_to do |format| format.html # index.html.erb format.json { render :json => @projects } end end 

我在jquery中添加了format.json行…我有:

 $.ajax({url: '/projects/yourprojects', dataType: 'json'}); 

所以这应该工作我想。 相反,服务器返回:“模板丢失”“缺少模板,,,,带{:locale => [:en,:en],:handlers => [:rjs,:rhtml,:builder,:rxml,: erb],:formats => [:html]}在视图路径中“

你需要一个jsOn返回的模板吗? rails 3 app应该不知道如何格式化json?

路线文件:

 resources :projects do collection do get 'yourprojects' end end 

您可以为真实REST设置Accept: application/json标头,或者您可以将格式添加到URL以便快速解决:

 $.ajax({url: '/projects/yourprojects.json', dataType: 'json'}); 

这不是Rails的问题,而是AJAX / jQuery不发送Accept标头:试试这个:

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

如果您的所有AJAX请求都需要JSON,那么您可以全局设置标头:

 $.ajaxSetup({ dataType: 'json', 'beforeSend' : function(xhr){ xhr.setRequestHeader("Accept", "application/json") } }); 

其他选项是将.json添加到路径或data:{format: 'json'}到选项的$.ajax哈希。 Rails默认支持格式路径后缀,用于resoures路由。 试试看rake routes

 :formats=>[:html] 

这说服务器认为正在请求html 。 尝试将.json添加到您的路径(和可能的路径),这将强制格式化。 要做到这将需要一个像这样的路线:

 map.your_projects '/projects/yourprojects.:format', :controller => 'projects', :action => 'yourprojects' 

不知怎的,某种程度上,对于这个请求, params[:format]应该是"json" ,因此格式处理程序可以做正确的事情。