आप ठीक - ठीक क्या जानना चाहते हैं? ActiveRecord में JSON में रिकॉर्ड करने वाले तरीके हैं। उदाहरण के लिए, अपने रेल कंसोल को खोलें और दर्ज करें ModelName.all.to_json
और आपको JSON आउटपुट दिखाई देगा। render :json
अनिवार्य रूप to_json
से सही हेडर के साथ ब्राउज़र को परिणाम कॉल और वापस करता है। यह जावास्क्रिप्ट में AJAX कॉल के लिए उपयोगी है जहाँ आप उपयोग करने के लिए जावास्क्रिप्ट ऑब्जेक्ट वापस करना चाहते हैं। इसके अतिरिक्त, आप callback
उस कॉलबैक का नाम निर्दिष्ट करने के लिए विकल्प का उपयोग कर सकते हैं जिसे आप JSONP के माध्यम से कॉल करना चाहते हैं।
उदाहरण के लिए, हम कहते हैं कि हमारे पास एक User
मॉडल है जो इस तरह दिखता है:{name: 'Max', email:' m@m.com'}
हमारे पास एक नियंत्रक भी है जो इस तरह दिखता है:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
अब, अगर हम इस तरह jQuery का उपयोग करके AJAX कॉल करते हैं:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
जैसा कि आप देख सकते हैं, हमने अपने रेल एप्लिकेशन से आईडी 5 के साथ उपयोगकर्ता प्राप्त करने और इसे हमारे जावास्क्रिप्ट कोड में उपयोग करने में कामयाब रहे क्योंकि इसे JSON ऑब्जेक्ट के रूप में वापस किया गया था। कॉलबैक विकल्प सिर्फ JSON ऑब्जेक्ट के साथ पारित नाम के एक जावास्क्रिप्ट फ़ंक्शन को पहले और एकमात्र तर्क के रूप में कहता है।
callback
विकल्प का एक उदाहरण देने के लिए , निम्नलिखित पर एक नज़र डालें:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
अब हम एक JSONP अनुरोध निम्नानुसार कर सकते हैं:
function testFunction(data) {
alert(data.name); // Will alert Max
};
var script = document.createElement("script");
script.src = "/users/5";
document.getElementsByTagName("head")[0].appendChild(script);
इस तरह के कॉलबैक का उपयोग करने की प्रेरणा आम तौर पर ब्राउज़र सुरक्षा को दरकिनार करने के लिए होती है जो क्रॉस मूल संसाधन साझाकरण (कोर) को सीमित करती है। JSONP का उपयोग अब और नहीं किया जाता है, हालांकि, क्योंकि अन्य तकनीक मौजूद CORS को सुरक्षित और आसान बनाने के लिए मौजूद हैं।