मेरे पास एक रेल एप्लिकेशन है, जो सर्वग्राही का उपयोग कर रहा है। और मेरे डेटाबेस में टोकन भी सेव करें। प्रमाणीकरण प्रक्रिया समाप्त होने के बाद, मैं jQuery का उपयोग करके सर्वज्ञ प्रदाता से डेटा खींचना चाहता हूं, उदाहरण के लिए मैं अपनी jQuery स्क्रिप्ट में @current_user.token का उपयोग कैसे कर सकता हूं?

0
Daniel Chen 17 मार्च 2011, 07:41

3 जवाब

सबसे बढ़िया उत्तर

रेल 3 के साथ मैं आपके jQuery में आसानी से चर का उपयोग करने के लिए js.erb टेम्पलेट फ़ाइलों का उपयोग करने की अनुशंसा करता हूं। आप जेएस अनुरोधों का जवाब देने के लिए अपना नियंत्रक सेट अप करते हैं, फिर आप उस यूआरएल के लिए अनुरोध करते हैं और प्रस्तुत जेएसईआरबी ब्राउज़र पर जावास्क्रिप्ट के रूप में निष्पादित होगा और यह आपके नियंत्रक कार्रवाई द्वारा निर्धारित चर का उपयोग कर सकता है।

आपका नियंत्रक कुछ इस तरह दिखेगा:

class Users < ApplicationController
  respond_to :js, :only => :me
  def me
    @current_user = User.find(session[:user])
    respond_with(@current_user)
  end
end

फिर me.js.erb . में कुछ इस तरह लिखें

$('#current_user_token').html("<%= escape_javascript(@current_user.token) %>");

आप अपने यूआरएल में .js जोड़कर सीधे अपनी कार्रवाई को कॉल कर सकते हैं।

http://0.0.0.0:3000/users/me.js

किसी टेम्पलेट से :remote => true विकल्प जोड़कर बस एक दूरस्थ प्रपत्र या लिंक का उपयोग करें

link_to "Show user token", me_users_path, :remote => true

आपकी me.js.erb फ़ाइल किसी भी अन्य JS फ़ाइल की तरह ही काम करती है और आपके पास जितना चाहें उतना JS हो सकता है। ईआरबी टैग का उपयोग करें जहां आप अपने चर या सहायक का उपयोग करना चाहते हैं, लेकिन सुनिश्चित करें कि आप उन्हें एस्केप_जावास्क्रिप्ट हेल्पर "<% = एस्केप_जावास्क्रिप्ट (रेंडर @current_user)%>" में लपेटते हैं।

जेएस.एआरबी टेम्पलेट को प्रस्तुत करने वाले चरों का अनुरोध करने के लिए एग्जी 5 के सुझाव का उपयोग करें और प्रतिक्रिया देने वाली क्रिया के लिए अजाक्स अनुरोध करें: जेसन। यह आपके @current_user को एक जेसन ऑब्जेक्ट के रूप में वापस कर देगा।

1
doritostains 17 मार्च 2011, 11:32

चूंकि jQuery केवल ब्राउज़र संदर्भ में चल रहा है, यह सर्वर पर मौजूद डेटाबेस से सीधे पूछताछ नहीं कर सकता है।

यदि आप क्लाइंट पर अपने डीबी से कुछ मूल्य तक पहुंच प्राप्त करना चाहते हैं। मैं सुझाव दूंगा कि या तो कुछ सर्वर एंडपॉइंट पर AJAX कॉल करें या पृष्ठ पर मान (JSON के रूप में संभव) लिखें और इसे w/jquery चयनकर्ता प्राप्त करें, उदाहरण: $('server_value')......

1
eggie5 17 मार्च 2011, 07:46

केवल AJAX के माध्यम से JSON को हथियाने के लिए Eggie5 का विचार अच्छा है ... एक अन्य विकल्प यह होगा कि टोकन को कुकी में रखा जाए और फिर यह हमेशा जावास्क्रिप्ट के माध्यम से सुलभ हो।

नियंत्रक

class SomeController
  def some_action
    cookies[:user_token] = current_user.token
  end
end

जे एस

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

var token = readCookie('user_token');
0
jenjenut233 18 मार्च 2011, 01:17