Tam olarak neyi bilmek istiyorsun? ActiveRecord, kayıtları JSON'a serileştiren yöntemlere sahiptir. Örneğin, raylar konsolunuzu açın ve girin ModelName.all.to_json
ve JSON çıktısını göreceksiniz. render :json
esasen to_json
, sonucu tarayıcıya doğru başlıklarla çağırır ve döndürür. Bu, JavaScript nesnelerini kullanmak üzere döndürmek istediğiniz JavaScript'teki AJAX çağrıları için kullanışlıdır. Ek olarak, callback
JSONP aracılığıyla çağırmak istediğiniz geri aramanın adını belirtme seçeneğini kullanabilirsiniz .
Örneğin, şöyle User
görünen bir modelimiz olduğunu varsayalım:{name: 'Max', email:' m@m.com'}
Ayrıca şuna benzeyen bir denetleyicimiz var:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
Şimdi, jQuery kullanarak şöyle bir AJAX çağrısı yaparsak:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
Gördüğünüz gibi, id 5 olan Kullanıcıyı rails uygulamamızdan almayı ve JSON nesnesi olarak döndürüldüğü için JavaScript kodumuzda kullanmayı başardık. Geri çağırma seçeneği, yalnızca ilk ve tek bağımsız değişken olarak JSON nesnesiyle geçirilen adlandırılmış bir JavaScript işlevini çağırır.
Seçeneğe bir örnek vermek callback
için aşağıdakilere bir göz atın:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
Şimdi bir JSONP talebini aşağıdaki gibi oluşturabiliriz:
function testFunction(data) {
alert(data.name); // Will alert Max
};
var script = document.createElement("script");
script.src = "/users/5";
document.getElementsByTagName("head")[0].appendChild(script);
Böyle bir geri aramayı kullanmanın nedeni, tipik olarak, çapraz kaynak kaynak paylaşımını (CORS) sınırlayan tarayıcı korumalarını atlatmaktır. Bununla birlikte, JSONP artık çok fazla kullanılmıyor, çünkü CORS'yi aşmak için daha güvenli ve daha kolay başka teknikler var.