2012-03-13 8 views
11

के साथ एक दृश्य में वैध, गैर-भागने वाले JSON को प्रिंट करें मैंने सब कुछ करने की कोशिश की है। मददगार raw, html_safeto_json के प्रत्येक संयोजन ::JSON.encode और CGI.unescape के साथ कुछ प्रयासों सहित। मुद्दा यह है कि मैं जो भी करता हूं, उसके बावजूद, मैं एक दृश्य में अच्छी तरह से गठित JSON मुद्रित नहीं कर सकता। यह हमेशा से बच निकला एचटीएमएल है।रेल

यहाँ मेरे विचार में कोड है:

var campaignData<%= "=" + (raw @campaign.to_json) if @campaign %>;

मेरे मामले में, यह हमेशा उद्धरण कि " के रूप में बच गए हैं। मैं उद्धरणों पर बस एक जीएसबी करूंगा, लेकिन यह एक भयानक समाधान है कि आईएमओ को एक बहुत ही सरल, अच्छी तरह से प्रलेखित उपयोग केस होना चाहिए।

उत्तर

30

के साथ इस प्रयास करें "=" तार के साथ है। चूंकि इसे असुरक्षित माना जाता है, यह अन्य स्ट्रिंग को दंडित करता है।

आप शायद या तो कर सकते हैं:

raw("=" + @campaign.to_json) 

या

"= #{@campaign.to_json}".html_safe 

जो मोटे तौर पर एक ही हैं।

+1

यह असुरक्षित है। क्या होगा यदि जेसन में एक स्ट्रिंग के साथ एक स्ट्रिंग है? यदि आप इसे एक स्क्रिप्ट टैग में डालते हैं, तो कोई क्लोजिंग स्क्रिप्ट टैग इंजेक्ट कर सकता है और मनमाने ढंग से कोड के साथ एक नया प्रारंभ कर सकता है। आपको json_escape' में जेसन स्ट्रिंग को लपेटने की आवश्यकता है। हालांकि, यह फ़ंक्शन हाल ही में तब तक टूट गया है (रेल 4.1)। – Kelvin

+0

हां, मुझे यह भी पता चला कि यह मेरे लिए काम नहीं करता है जब @campaign == "" – hrdwdmrbl

+0

धन्यवाद एक टन !!! –

5

क्या आपने escape_javascript को आजमाया था?

यहां * .haml फ़ाइल का एक उदाहरण है, जिसे मैंने अभी अपने उत्तर का परीक्षण करने के लिए जोड़ा है।

:javascript 
    var foo=$.parseJSON("#{j @albums.to_json}") 

कहाँ jescape_javascript के लिए एक छोटे से अन्य नाम है।

+0

हां कर पाए हैं, कि काम नहीं किया। अभी मैं मैन्युअल रूप से प्रत्येक मूल्य को मैन्युअल रूप से प्रिंट कर रहा हूं, जो एक भयानक समाधान है, लेकिन इसका एकमात्र तरीका यह है कि मैं इसे काम करने में सक्षम हूं। –

+0

क्या आप यहां अपनी बच निकली स्ट्रिंग का थोड़ा सा पेस्ट कर सकते हैं? इसके अलावा, आप रूबी और रेल के किस संस्करण का उपयोग करते हैं? बस सोच रहा है कि – cutalion

+0

के साथ क्या गलत हो सकता है यह मान्य JSON था, उद्धरणों को छोड़कर HTML उद्धरण इकाई '"' रेल का उपयोग 3.2.1 –

9

के बाद से ActiveSupport 2.3.3 आपको बस इतना करना .as_json