2012-09-20 19 views
42

मैं बस एक ब्लॉग पर आया जो रेल में j फ़ंक्शन का उल्लेख करता है। वे AJAX शैली पृष्ठ अपडेट करने के लिए इसका उपयोग कर रहे थे।रेल में जे फ़ंक्शन क्या करता है?

$('#cart').html("<%=j render @cart %>"); 

मैं वे आंशिक उपयोग कर रहे हैं cart आंशिक रेंडर करने के लिए मिलता है, लेकिन क्या j की बात? मुझे कुछ लेख मिल गए हैं जो कहते हैं कि यह स्ट्रिंग को कुछ जावास्क्रिप्ट को स्वीकार करेगा, लेकिन इसका क्या अर्थ है?

उत्तर

51

escape_javascript(javascript)

पलायन कैरिएज रिटर्न और जावास्क्रिप्ट क्षेत्रों के लिए सिंगल और डबल उद्धरण।

उपनाम जे() के माध्यम से भी उपलब्ध है।

the rails docs से।

67

पीटर वास्तव में सही उत्तर पोस्ट किया। लेकिन मैं विस्तृत करने की कोशिश करूंगा:

मुझे लगता है कि आप AJAX की मूल अवधारणा से परिचित हैं? आइए कहें कि आप एजेक्सी फैशन में टिप्पणियां बनाने में सक्षम होना चाहते हैं। में आप के माध्यम से अपने CommentsController में पोस्ट अनुरोध का जवाब हो सकता है रेल:

def create 
    @comment = Comment.new(params[:comment]) 
    respond_to do |format| 
    render.js 
    end 
end 

इसका मतलब यह है कि अगर ग्राहक (jQuery/जावास्क्रिप्ट के माध्यम से) से एक ajax अनुरोध CommentsController को प्रस्तुत यह प्रारूप पहचान लेंगे (.js) और _create.js.erb आंशिक के साथ प्रतिक्रिया दें। आंशिक तो कुछ इस तरह से नई टिप्पणी प्रस्तुत करना होगा: कुछ बुराई उपयोगकर्ता युक्त (दुर्भावनापूर्ण) जावास्क्रिप्ट जायें जो कि एक टिप्पणी प्रस्तुत कर सकते हैं:

$('.comments').append("<%=j render @comment %>"); 

अब j या escape_javascript विधि को पाने के लिए अपने पृष्ठ पर क्रियान्वित किया जा जब तक आप j विधि का इस्तेमाल करते हैं जो

पलायन कैरिएज रिटर्न और जावास्क्रिप्ट के लिए सिंगल और डबल उद्धरण खंडों।

और इसलिए ब्राउज़र में कोड के निष्पादन को रोकता है।

+0

ध्यान दें कि यदि आप जो भी प्रतिपादन कर रहे हैं वह उपयोगकर्ता नहीं बनाया गया है, तो संभवतः आप उन वर्णों से बचना चाहते हैं जो जावास्क्रिप्ट सुरक्षित नहीं हैं क्योंकि अन्यथा आपका जावास्क्रिप्ट टूट सकता है। – DaveMongoose

संबंधित मुद्दे