के लिए यूआरएल पैराम पर जेएसओएन एन्कोडिंग मुझे बैकबोन.मोडेल.save कॉल बनाने में कुछ परेशानी हो रही है। जिस वेब सेवा को मैं कॉल कर रहा हूं वह यूआरएल पैरामीटर का उपभोग करता है, लेकिन जावास्क्रिप्ट में जो कुछ है वह बदले गए फ़ील्ड का एक ऑब्जेक्ट है। उदाहरण के लिए, मेरे पास ऑब्जेक्ट {foo: 'bar', yar: 'har'}
है, और मुझे बैकबोन.मोडेल.save http://server/path/to/service?foo=bar&yar=har
बैकबोन.Model.save (पैच = सत्य)
जैसे यूआरएल को पैच अनुरोध भेजने के लिए सरल, सही लगता है? यह मुझे किसी भी तरह की परेशानी का एक गुच्छा दे रहा है। यहाँ मैं अब तक क्या आपके पास यह है (जो काम नहीं करता, मैं सफलता/त्रुटि कॉलबैक, भी है, लेकिन मुझे नहीं लगता कि उन सवाल के लिए महत्वपूर्ण हैं):
object =
foo: 'bar',
yar: 'har'
model.save object,
patch: true
मैं कुछ कोशिश की है अन्य विकल्प भी:
model.save object,
patch: true
emulateJSON: true
इस सेट contentType को "application/x-www फार्म-urlencoded" है, जो अच्छा है, लेकिन Backbone.sync द्वारा ajax अनुरोध में भेजा गया डेटा था: {मॉडल: " {"foo": "bar", "yar": "har"} "। सेवा को यह पता चला कि उसे "मॉडल" संपत्ति के साथ क्या करना है।
model.save object,
patch: true
contentType: "application/x-www-form-urlencoded"
यह सिर्फ कोड object
स्ट्रिंग के रूप और सामान options.data
में कि। फिर, सेवा नहीं जानता कि इसके साथ क्या करना है।
कोई अन्य विचार है कि मैं इसे अपनी सेवा के विशिष्टता के अनुरूप कैसे प्राप्त कर सकता हूं? मैं खुद को AJAX कॉल कर सकता हूं और मॉडल (और संग्रह से संबंधित) को अपडेट कर सकता हूं, लेकिन मैं वास्तव में ऐसा नहीं करता। एक अजाक्स अनुरोध है कि मेरे लिए काम करता है:
$.ajax
url: "http://server/path/to/service"
type: "PATCH"
data: object
अद्यतन: कारण मेरे दो पहले विकल्प काम नहीं किया Backbone.js अपने आप में स्पष्ट है:
// Ensure that we have the appropriate request data.
if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
params.contentType = 'application/json';
params.data = JSON.stringify(options.attrs || model.toJSON(options));
}
// For older servers, emulate JSON by encoding the request into an HTML-form.
if (options.emulateJSON) {
params.contentType = 'application/x-www-form-urlencoded';
params.data = params.data ? {model: params.data} : {};
}
इस को देखते हुए, मैं शायद सोचा कि अगर मैं options.data
में वस्तु में वस्तु भरवां और खाली विशेषताओं में भेजा है, शायद यह काम चाहते हैं:
model.save {},
patch: true
data: object
जाहिर है इस की कोशिश की पैच एक विकल्प "[ऑब्जेक्ट ऑब्जेक्ट]"। मुझे लगता है कि यह ऑब्जेक्ट की एक स्ट्रिंगिफाइज किया गया था ... कहीं ... लेकिन यह सही उत्तर के करीब हो सकता है?