2014-06-09 2 views
1

J'ai un peu d'expérience avec RoR, même si je suis un peu novice en AJAX. Mon but est d'avoir un client HTML5 + JavaScript et un serveur Ruby on Rails fonctionnant sur différentes machines (éventuellement). Ce que je veux, c'est le client JavaScript pour obtenir le contenu du serveur au format JSON, pour être analysé par la suite. J'ai déjà essayé un tas de choses, comme ajouter un "responseType", etc, mais pas d'entre eux a travaillé.Obtenir du contenu JSON à partir du serveur Ruby on Rails en utilisant AJAX

Mon fichier JavaScript en cours est comme ceci:

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

     alert(xmlhttp.responseText); 
}); 

Et mon application RoR a un chemin "/ contenu" qui appelle la fonction d'index de contents_controller.rb, qui est comme ceci:

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 est-il le bon moyen de le faire? Je suis un peu perdu.

Merci beaucoup!

+0

Pourquoi utilisez-vous les méthodes de vanille lorsque vous avez jQuery? Regardez [$ .ajax] (http://api.jquery.com/jquery.ajax/). Si Ajax est la bonne façon de le faire est de décider si je pense. –

Répondre

3

Avec jQuery, vous pouvez le faire comme ceci.

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

Votre format.json doit gérer vos réponses.

+0

Ça a marché! Juste changé le 'url' pour ajouter '.json' et tout allait bien. Merci beaucoup! –

1

Vous pouvez simplement appeler /contents.json (ajoutez .json avec chaque URL pour obtenir le modèle de sortie json) ou Définissez votre format par défaut sur json si vous n'avez jamais besoin d'une vue html. Pour cela ...

Vous pouvez modifier vos fichiers routes.rb pour spécifier le format par défaut.

routes.rb

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

Je ne connaissais pas ce .json pour obtenir le modèle json. Merci! Mais j'ai essayé d'ajouter ".json" au code JavaScript ci-dessus et j'ai toujours une réponse vide ... –

+0

Vous devez avoir un modèle pour la sortie json. Comme index.html.erb est rendu pour html, de même index.json.jbuilder sera rendu pour la requête json. Vous pouvez voir le modèle json dans l'un de vos échafaudages (ou générer un échafaudage et voir /my_scffold_name.json fonctionne) – Neeraj

+0

Jbuilder est une autre langue DSL – Neeraj

Questions connexes