在rails应用程序中输出jSON

Woz*_*Poz 10 jquery json ruby-on-rails ruby-on-rails-3

好的,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
Run Code Online (Sandbox Code Playgroud)

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

$.ajax({url: '/projects/yourprojects', dataType: 'json'});
Run Code Online (Sandbox Code Playgroud)

所以这应该工作我想.而是服务器返回:"模板丢失""缺少模板,,,,带{: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
Run Code Online (Sandbox Code Playgroud)

yfe*_*lum 6

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

$.ajax({url: '/projects/yourprojects.json', dataType: 'json'});
Run Code Online (Sandbox Code Playgroud)


ger*_*tas 5

这不是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);
     }
  }
);
Run Code Online (Sandbox Code Playgroud)

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

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

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