在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"
,因此格式处理程序可以做正确的事情。