2009-05-25 6 views
48

मैं एक jQuery ajax PUT अनुरोध है कि इस तरह दिखता है भेजने के लिए कोशिश कर रहा हूँ का उपयोग कर रेल के लिए डेटा को कैसे रखूँ:मैं JQuery

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

लेकिन मैं निम्नलिखित त्रुटि मिलती है:

The error occurred while evaluating 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' 
    (__DELEGATION__):2:in `__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 का उपयोग करना चाहता हूं !!

JSON को रेल में रखने के लिए मैं क्या करूँ?

उत्तर

84

पुट और डिलीट सभी ब्राउज़रों द्वारा समर्थित नहीं हैं, रूबीऑनरल _method नामक आपके डेटा के साथ एक अतिरिक्त पैरामीटर पारित करने का समर्थन करता है जो इंगित करेगा कि आरओआर अनुरोध का इलाज कैसे करेगा।

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

कि यहां मुद्दा यह होना प्रतीत नहीं होता है (और किसी भी आधुनिक वेब ब्राउज़र वास्तव में PUT लिए समर्थन की कमी करते हैं?)। सर्वर/डेटा प्राप्त/प्राप्त कर रहा है, बस इसे सही तरीके से पार्स नहीं कर रहा है। –

+2

हां अधिकांश ब्राउज़रों में PUT और DELETE की कमी है, केवल प्राप्त करें और पोस्ट करें। सर्वर गलत कार्रवाई, यानी डेटा प्राप्त कर सकता है। यदि यह एक पोस्ट है तो यह सामान्य रूप से कार्यवाही के लिए मानचित्र करेगा और एक PUT अपडेट कार्रवाई के लिए मानचित्र करेगा। – Kris

+5

http://annevankesteren.nl/2007/10/http-method-support मुझे अन्यथा विश्वास करेगा (यानी कि बहुत सारे ब्राउज़र वास्तव में समर्थन करते हैं और हटाते हैं)। – mogsie

5

ठीक है, वास्तव में मेरे JSON डेटा में पृष्ठ कुंजी, मेरी गलती नहीं थी। तो यही कारण है कि यह सही ढंग से पार्सिंग नहीं था। लेकिन अब मुझे एक अच्छी तरह से पार्स किए गए जेसन ऑब्जेक्ट की बजाय पेज कुंजी के मान के रूप में "[ऑब्जेक्ट ऑब्जेक्ट]" स्ट्रिंग मिलती है।

मुझे कहां देखना चाहिए: JQuery या Rails?

संपादित करें:

मुझे यहां अपनी समस्या पाया एक स्क्रिप्ट के साथ json वस्तु stringifying समाधान कर लिया है: www.json.org/js.html:

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

रेल पक्ष json मणि पर चाहिए आवश्यकता होगी। नियंत्रक में:

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

मुझे JSON.strigify परिभाषित नहीं किया गया है, क्या इसमें शामिल करने के लिए एक JQuery lib है? – Kris

+0

यह एक टाइपो है। यह "स्ट्रिंग" होना चाहिए। – Dylan

+0

मेरा मुद्दा है कि डेटाबेस अद्यतन किया जा रहा है भले ही अनुरोध लंबित रहता है। – Alex

1

मैं एक ऐसी ही समस्या [वस्तु वस्तु] jQuery/पटरियों के साथ किया था, लेकिन HTML के साथ, बल्कि JSON से। शायद यह मदद मिलेगी -

[object Object]

data: { lesson: { date: drop_date } } 

की परम lesson[date]

data: { "lesson[date]": drop_date } 

आशा की परम इस मदद करता है -

35

jQuery में dataType परम नहीं है कि तुम क्या भेजने के लिए, लेकिन इसके बजाय प्रारूप को निर्दिष्ट करता है कि आप उत्तर उत्तर दें (हाँ, यह av ery गरीब नाम)। यदि आप किसी अन्य प्रारूप में सर्वर पर अपना डेटा भेजना चाहते हैं तो application/x-www-form-urlencoded आपको contentType परम का उपयोग करना चाहिए। तुम भी क्रमानुसार करने की जरूरत है अपने data:

$.ajax({ 
     type: "PUT", 
     url: '/admin/pages/1.json', 
     data: JSON.stringify({...}), 
     contentType: 'application/json', // format of request payload 
     dataType: 'json', // format of the response 
     success: function(msg) { 
     alert("Data Saved: " + msg); 
     } 
}); 
0

आप शायद सिर्फ jQuery पर अनुरोध हेडर सेट करना होगा।

jQuery.ajaxSetup({ 
    'beforeSend': function(xhr) { 
    xhr.setRequestHeader("Accept", "text/javascript"); 
    } 
}) 
1
var id = $('#route_id').val() 
$.ajax({ 
    type: 'PUT', 
    url: '/routes/'+ id, 
    data: $('#markerform').serializeArray(), 
    dataType: "JSON", 
    success: function(data) { 
     console.log(data); 
    } 
});