Qu'est ce que tu veux savoir exactement? ActiveRecord a des méthodes qui sérialisent les enregistrements dans JSON. Par exemple, ouvrez votre console de rails et entrez ModelName.all.to_json
et vous verrez la sortie JSON. render :json
appelle to_json
et renvoie essentiellement le résultat au navigateur avec les en-têtes corrects. Ceci est utile pour les appels AJAX en JavaScript où vous souhaitez renvoyer des objets JavaScript à utiliser. De plus, vous pouvez utiliser lecallback
option pour spécifier le nom du rappel que vous souhaitez appeler via JSONP.
Par exemple, disons que nous avons un User
modèle qui ressemble à ceci:{name: 'Max', email:' m@m.com'}
Nous avons également un contrôleur qui ressemble à ceci:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
Maintenant, si nous faisons un appel AJAX en utilisant jQuery comme ceci:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
Comme vous pouvez le voir, nous avons réussi à obtenir l'utilisateur avec l'ID 5 de notre application rails et à l'utiliser dans notre code JavaScript car il a été renvoyé en tant qu'objet JSON. L'option de rappel appelle simplement une fonction JavaScript du named passé avec l'objet JSON comme premier et unique argument.
Pour donner un exemple de l' callback
option, jetez un œil à ce qui suit:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
Nous pouvons maintenant créer une requête JSONP comme suit:
function testFunction(data) {
alert(data.name); // Will alert Max
};
var script = document.createElement("script");
script.src = "/users/5";
document.getElementsByTagName("head")[0].appendChild(script);
La motivation pour utiliser un tel rappel est généralement de contourner les protections du navigateur qui limitent le partage de ressources entre origines (CORS). Cependant, JSONP n'est plus beaucoup utilisé, car il existe d'autres techniques pour contourner CORS qui sont plus sûres et plus faciles.