Cosa vuoi sapere esattamente? ActiveRecord dispone di metodi che serializzano i record in JSON. Ad esempio, apri la tua console di rails ed entra ModelName.all.to_json
e vedrai l'output JSON. render :json
essenzialmente chiama to_json
e restituisce il risultato al browser con le intestazioni corrette. Ciò è utile per le chiamate AJAX in JavaScript in cui si desidera restituire gli oggetti JavaScript da utilizzare. Inoltre, puoi utilizzare l' callback
opzione per specificare il nome della richiamata che desideri chiamare tramite JSONP.
Ad esempio, diciamo di avere un User
modello simile a questo:{name: 'Max', email:' m@m.com'}
Abbiamo anche un controller simile a questo:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
Ora, se eseguiamo una chiamata AJAX usando jQuery in questo modo:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
Come puoi vedere, siamo riusciti a ottenere l'utente con id 5 dalla nostra app rails e usarlo nel nostro codice JavaScript perché è stato restituito come oggetto JSON. L'opzione callback chiama solo una funzione JavaScript del nome passato con l'oggetto JSON come primo e unico argomento.
Per fornire un esempio callback
dell'opzione, dai un'occhiata a quanto segue:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
Ora possiamo creare una richiesta JSONP come segue:
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 motivazione per l'utilizzo di tale callback è in genere quella di aggirare le protezioni del browser che limitano la condivisione delle risorse tra le origini (CORS). Tuttavia, JSONP non viene più utilizzato molto perché esistono altre tecniche per aggirare CORS che sono più sicure e facili.