2010-09-26 18 views
10

ठीक है, यहां 3 नए डेवलपर रेल हैं।एक रेल ऐप में जेएसओएन आउटपुट

मैं चाहता हूं कि मेरी jquery परियोजनाओं के लिए रेल 3 आवेदन से एक जेसन ऑब्जेक्ट प्राप्त करने में सक्षम हो। यहाँ मेरा नियंत्रक है।

def yourprojects 
    @projects = Projects.all(current_user) 

    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render :json => @projects } 
    end 
end 

मैं format.json लाइन जोड़ा ... jQuery में मेरे पास है:

$.ajax({url: '/projects/yourprojects', dataType: 'json'}); 

ताकि काम करना चाहिए मैंने सोचा। इसके बजाय सर्वर लौट रहा है: "टेम्पलेट गुम है" "गुम टेम्पलेट ,,, {: locale => [: en,: en],: हैंडलर => [: आरजेएस,: आरटीएमएल,: बिल्डर,: आरएक्सएमएल,: erb],: प्रारूप => [: html]} पथों को देखने में "

क्या आपको किसी जेएसओएन रिटर्न के लिए टेम्पलेट चाहिए? रेल 3 एप नहीं जानना चाहिए कि जेसन को कैसे प्रारूपित किया जाए?

मार्गों फ़ाइल:

resources :projects do 
    collection do 
     get 'yourprojects' 
    end 
end 

उत्तर

6

आप वास्तविक बाकी के लिए Accept: application/json हैडर सेट कर सकते हैं, या आप जल्दी hackery के लिए यूआरएल के लिए प्रारूप जोड़ सकते हैं:

$.ajax({url: '/projects/yourprojects.json', dataType: 'json'}); 
+0

यह शानदार है - और काम किया! आपको धन्यवाद मैं इसे Google पर कहीं भी नहीं ढूंढ सका! मुझे स्वीकार करने का विचार पसंद है, अभी मेरे पास यह मेरी जेएस फ़ाइल ($ .ajaxSetup ({'firstSend': function (xhr) {xhr.setRequestHeader ("स्वीकार करें", "टेक्स्ट/जावास्क्रिप्ट") के शीर्ष पर है। }})) .... समस्या कुछ AJAX अनुरोध है मुझे एक .js प्रतिक्रिया की आवश्यकता है। अन्य मैं जेएसओएन चाहता हूँ।इसे संभालने का स्मार्ट तरीका क्या है? धन्यवाद! – WozPoz

0
:formats=>[:html] 

का कहना है कि सर्वर सोच रही है कि html का अनुरोध किया जा रहा है। अपने पथ (और संभव मार्ग) पर .json जोड़ने का प्रयास करें और यह प्रारूप को मजबूर करेगा। इस अनुरोध के लिए

map.your_projects '/projects/yourprojects.:format', 
    :controller => 'projects', 
    :action => 'yourprojects' 

"json" किसी तरह, किसी न किसी प्रकार, params[:format] होना चाहिए ताकि प्रारूप संचालकों सही काम कर सकते हैं: कि इस तरह एक मार्ग कुछ चाहिए होगा बनाने के लिए।

+0

धन्यवाद Squeegy, लेकिन रेल 3 के लिए है? मेरी कॉन्फ़िगरेशन/मार्ग इस तरह दिखने के लिए दिखते हैं (ऊपर दिए गए प्रश्न में भी जोड़ा गया है): संसाधन: परियोजनाएं संग्रह करें 'yourprojects' अंत अंत – WozPoz

+0

अंत में, मैंने सोचा कि रेल 3 अनुरोध प्रकार निर्धारित करने के लिए पर्याप्त स्मार्ट था और सही प्रतिक्रिया की सेवा करें, यानी आप विभिन्न प्रकार के प्रतिक्रिया प्रकार (एचटीएमएल, जेएस, जेसन, एक्सएमएल) क्यों प्राप्त कर सकते हैं? – WozPoz

+0

मैं वास्तव में थोड़ा पीछे हूं और यह सुनिश्चित नहीं करता कि रेल 3 मार्ग कैसे काम करते हैं। लेकिन 2.x ने वर्णन किया जैसे मैंने वर्णन किया। माफ़ कीजिये! –

5

यह रेल के मुद्दे बल्कि AJAX/jQuery हैडर स्वीकार नहीं भेज नहीं है: इस प्रयास करें:

$.ajax({ 
    url: 'url_to_action', dataType: "json", 
    beforeSend : function(xhr){ 
     xhr.setRequestHeader("Accept", "application/json") 
    }, 
    success : function(data){ 
     //.. do something with data 
    }, 
    error: function(objAJAXRequest, strError, errorThrown){ 
     alert("ERROR: " + strError); 
    } 
    } 
); 

अपने सभी AJAX अनुरोध की आशा करते हैं JSON, तो आप शीर्ष लेख विश्व स्तर पर सेट कर सकते हैं:

$.ajaxSetup({ 
    dataType: 'json', 
    'beforeSend' : function(xhr){ 
    xhr.setRequestHeader("Accept", "application/json") 
    } 
}); 

अन्य विकल्प .json पथ या data:{format: 'json'} से $.ajax विकल्पों में हैश जोड़ देगा। रेल resoures रूटिंग के लिए डिफ़ॉल्ट रूप से प्रारूप पथ प्रत्यय का समर्थन करता है। देखने के लिए बस rake routes आज़माएं।

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