Co dokładnie chcesz wiedzieć? ActiveRecord zawiera metody serializacji rekordów do formatu JSON. Na przykład, otwórz konsolę railsów i wejdź, ModelName.all.to_json
a zobaczysz wyjście JSON. render :json
zasadniczo wywołuje to_json
i zwraca wynik do przeglądarki z poprawnymi nagłówkami. Jest to przydatne w przypadku wywołań AJAX w JavaScript, w których chcesz zwrócić obiekty JavaScript do użycia. Dodatkowo możesz użyć callback
opcji, aby określić nazwę wywołania zwrotnego, które chcesz wywołać przez JSONP.
Na przykład, powiedzmy, że mamy User
model, który wygląda następująco:{name: 'Max', email:' m@m.com'}
Mamy też kontroler, który wygląda tak:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
Teraz, jeśli wykonamy wywołanie AJAX za pomocą jQuery w następujący sposób:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
Jak widać, udało nam się pobrać użytkownika o identyfikatorze 5 z naszej aplikacji railsowej i użyć go w naszym kodzie JavaScript, ponieważ został zwrócony jako obiekt JSON. Opcja wywołania zwrotnego po prostu wywołuje funkcję JavaScript o nazwie przekazanej z obiektem JSON jako pierwszym i jedynym argumentem.
Aby podać przykład callback
opcji, spójrz na następujące kwestie:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
Teraz możemy utworzyć żądanie JSONP w następujący sposób:
function testFunction(data) {
alert(data.name); // Will alert Max
};
var script = document.createElement("script");
script.src = "/users/5";
document.getElementsByTagName("head")[0].appendChild(script);
Motywacją do korzystania z takiego wywołania zwrotnego jest zwykle obejście zabezpieczeń przeglądarki, które ograniczają udostępnianie zasobów między źródłami (CORS). Jednak JSONP nie jest już tak często używany, ponieważ istnieją inne techniki obchodzenia CORS, które są bezpieczniejsze i łatwiejsze.