2014-06-09 112 views
1

我對RoR有一些經驗,雖然我在AJAX方面是一個新手。我的目標是在不同的機器上運行HTML5 + JavaScript客戶端和Ruby on Rails服務器(最終)。使用AJAX從Ruby on Rails服務器獲取JSON內容

我想要的是以JSON格式從服務器獲取內容的JavaScript客戶端,以後進行解析。我已經嘗試了一些東西,比如添加一個「responseType」等,但其中沒有一個能夠工作。

我現在的JavaScript文件是這樣的:

$(document).ready(function() { 
     var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.open("GET", "http://localhost:3000/contents", true); 
     xmlhttp.send(); 

     alert(xmlhttp.responseText); 
}); 

而我的回報率的應用程序有一個路徑「/內容」調用contents_controller.rb的指數函數,即是這樣的:

def index 
    @contents = Content.all.order('created_at DESC') 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @contents } 
    end 
end 

AJAX甚至是正確的方法嗎?我有點失落。

非常感謝!

+0

你爲什麼要使用香草JS方法,當你擁有jQuery的?看看[$ .ajax](http://api.jquery.com/jquery.ajax/)。無論ajax是否是正確的做法,都取決於你決定我的想法。 –

回答

3

有了jQuery,你可以這樣做。

$.ajax({ 
    url: '/contents', 
    type: 'GET', 
    dataType: 'json', 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); 
    }, 
    success: function(data){/* do something meaningful with data */}, 
    error: function(xhr, status, response) {/* your error callback */} 
}); 

您的format.json應處理您的回覆。

+0

它的工作!只需更改'網址'即可添加'.json',而且一切正常。非常感謝! –

1

你可以簡單地調用/contents.json(增加以.json與每一個網址讓弗朗JSON模板輸出) 或 設置,如果你永遠不需要HTML視圖的默認格式爲JSON。爲此...

您可以修改您的routes.rb文件以指定默認格式。

的routes.rb

resources :contents, defaults: {format: :json} 
+0

我不知道那個.json來獲取json模板。謝謝! 但我試圖在上面的JavaScript代碼中添加「.json」,並且我仍然得到一個空的答案... –

+0

您需要爲json輸出提供模板。就像index.html.erb呈現爲html一樣,index.json.jbuilder也會呈現爲json請求。您可以在您的腳手架中看到json模板(或生成腳手架並查看/my_scffold_name.json的作品) – Neeraj

+0

Jbuilder是另一種DSL語言 – Neeraj