簡體   English   中英

在rails應用程序中輸出jSON

[英]Outputting jSON in a rails app

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM