2009-05-25 11 views
15

मैं एक jQuery अजाक्स पुट अनुरोध भेजने की कोशिश कर रहा हूं जो इस तरह दिखता है:मैं jQuery का उपयोग कर रेल पर रूबी को JSON डेटा कैसे डालूं?

$.ajax({ 
     type: "PUT", 
     url: '/admin/pages/1.json', 
     data: { page : {...} }, 
     dataType: 'json', 
     success: function(msg) { 
     alert("Data Saved: " + msg); 
     } 
}); 

मेरा नियंत्रक मोटे तौर पर इस तरह दिखता है:

  respond_to do |format| 
     if @page.update_attributes params[:page] 
      format.html{ ... } 
      format.json{ render :json => {:saved => 'ok'}.to_json } 
     else 
      format.html{ ... } 
      format.json{ render :json => {:saved => 'fail'}.to_json } 
     end 
     end 

लेकिन मुझे निम्न त्रुटि मिलती है।

त्रुटि nil.name /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:29:in merge_element!' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:18:in parse ' ( डिलीजेशन) का मूल्यांकन करते समय त्रुटि हुई): 2: __send__' (__DELEGATION__):2:in parse ' /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/hash/conversions.rb:154:in' from_xml ' ... में ...

ऐसा लगता है कि रेल पर रूबी एक्सएमएल के रूप में पैरामीटर को पार्स करने की कोशिश कर रहा है, लेकिन मैं JSON का उपयोग करना चाहता हूं!

जेएसओएन को रेल पर रूबी डालने के लिए मैं क्या करूँ?

+1

अपडेट::

इसके अलावा, आप JSON.stringify का उपयोग कर अपने data क्षेत्र क्रमानुसार करने की जरूरत है http://stackoverflow.com/questions/907910/how- कर-ए-डाल-डेटा-टू-रेल-jQuery का उपयोग कर – tvanfosson

उत्तर

5

आपको अपने विकल्पों में सामग्री टाइप करने की आवश्यकता है। सामग्री टाइप जो आप भेज रहे हैं। डेटा टाइप वह है जिसे आप वापस उम्मीद करते हैं। आपको ध्यान से documentation on the options argument to ajax पढ़ना चाहिए।

+0

डेटा भी धारावाहिक की जरूरत है। मेरा उत्तर देखें –

2
इसके अलावा

, सिर के ऊपर है, लेकिन वहाँ है कि काम करने से रोकता है इस पर रेल 2.3.2 रूबी में एक बग है। देखें Ruby on Rails 2.3 JSON "put" request routing is broken

7

सामग्री सेट करना टाइप मेरे लिए काम नहीं करता है। मुझे पैरा के लिए हैश की बजाय स्ट्रिंग मिल रही थी [: पेज]।

जावास्क्रिप्ट में JSON में पाया एक स्क्रिप्ट के साथ JSON ऑब्जेक्ट Stringifying:

तो मैं इसे इस तरह हल

$.ajax({ 
    type: "PUT", 
    url: '/admin/pages/1.json', 
    data: { page : JSON.strigify({...}) }, 
    dataType: 'json', 
    success: function(msg) { 
     alert("Data Saved: " + msg); 
    } 
}); 

रेल तरफ रूबी पर, एक JSON मणि आवश्यक किया जाना चाहिए । नियंत्रक में:

params[:page] = JSON.parse params[:page] if params[:page].is_a? String 

यह बिल्कुल सुंदर नहीं है, लेकिन यह मेरे लिए काम करता है।

+0

इसके साथ सावधान रहें - PUT सभी ब्राउज़रों द्वारा समर्थित नहीं है। कुछ केवल प्राप्त करते हैं और पोस्ट करते हैं, मुझे यकीन नहीं है कि कौन सा है। – skaffman

+0

पार्सिंग रेल द्वारा स्वचालित रूप से किया जाएगा यदि आप contentType निर्धारित किया है। मेरी प्रतिक्रिया देखें –

2

आप स्क्रिप्ट जोड़ने के लिए नहीं करना चाहते हैं, तो आप

$.parseJSON("some_jsonish_string") 
1

आप अपने विकल्पों में "application/json" को contentType निर्धारित करने की आवश्यकता कर सकता है; dataType केवल वही है जो आप उम्मीद करते हैं। इसे संपादित करने के बजाय एक नया सवाल पूछकर अपने मूल प्रश्न

$.ajax({ 
    type: "PUT", 
    url: '/admin/pages/1.json', 
    data: JSON.stringify({ page : {...} }), 
    contentType: 'application/json', 
    dataType: 'json', 
    success: function(msg) { 
     alert("Data Saved: " + msg); 
    } 
}) 
संबंधित मुद्दे