Was willst du genau wissen? ActiveRecord verfügt über Methoden zum Serialisieren von Datensätzen in JSON. Öffnen Sie beispielsweise Ihre Rails-Konsole und geben ModelName.all.to_json
Sie ein, und Sie sehen die JSON-Ausgabe. render :json
ruft im Wesentlichen to_json
das Ergebnis auf und gibt es mit den richtigen Headern an den Browser zurück. Dies ist nützlich für AJAX-Aufrufe in JavaScript, bei denen Sie JavaScript-Objekte zur Verwendung zurückgeben möchten. Darüber hinaus können Sie mit dieser callback
Option den Namen des Rückrufs angeben, den Sie über JSONP aufrufen möchten.
Nehmen wir zum Beispiel an, wir haben ein User
Modell, das so aussieht:{name: 'Max', email:' m@m.com'}
Wir haben auch einen Controller, der so aussieht:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
Wenn wir nun einen AJAX-Aufruf mit jQuery wie folgt ausführen:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
Wie Sie sehen, haben wir es geschafft, den Benutzer mit der ID 5 aus unserer Rails-App abzurufen und in unserem JavaScript-Code zu verwenden, da er als JSON-Objekt zurückgegeben wurde. Die Rückrufoption ruft nur eine JavaScript-Funktion des Namens auf, die mit dem JSON-Objekt als erstem und einzigem Argument übergeben wurde.
callback
Sehen Sie sich Folgendes an, um ein Beispiel für die Option zu geben :
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
Jetzt können wir eine JSONP-Anfrage wie folgt erstellen:
function testFunction(data) {
alert(data.name); // Will alert Max
};
var script = document.createElement("script");
script.src = "/users/5";
document.getElementsByTagName("head")[0].appendChild(script);
Die Motivation für die Verwendung eines solchen Rückrufs besteht normalerweise darin, den Browserschutz zu umgehen, der die gemeinsame Nutzung von Ressourcen zwischen Quellen (CORS) einschränkt. JSONP wird jedoch nicht mehr so häufig verwendet, da andere Techniken zur Umgehung von CORS existieren, die sicherer und einfacher sind.