2009-12-04 7 views
8

मेरा सवाल है: क्या हम कुछ जेसन डेटा पोस्ट करने के लिए dojo.xhrPost का उपयोग कर सकते हैं? अधिक जानकारी:Dojo dojo.rawXhrPost और dojo.xhrPost

मैं एक जेएसओएन डेटा को एक विश्वसनीय सेवा में पोस्ट करने के लिए दोजो कोड के साथ प्रयोग कर रहा हूं। ऐसा लगता है कि dojo.xhrPost और dojo.rawXhrPost अलग-अलग हैं, या अधिक सटीक rawXhrPost() काम और xhrPost() नहीं हैं। यह dojo.rawXhrPost का मूल उद्देश्य के लिए एक विधि है कि सर्वर के लिए एक कच्चे पोस्ट शरीर भेजने के लिए इस्तेमाल किया जा सकता था docs

की मेरी पढ़ने के अनुरूप नहीं है। 1.3 के अनुसार, यह फ़ंक्शन dojo.xhrPost() के साथ आम है। तो, dojo.rawXhrPost() के उपयोग के लिए, dojo.xhrPost देख()

कौन सा मतलब है कि xhrPost() पर्याप्त है। मेरा कोड इस तरह दिखता है - मुझे एक "खिलौना" लाइब्रेरी सेवा मिली है जो पुस्तकें के संस्करणों का प्रबंधन करती है। कोड, एक नई प्रविष्टि पोस्ट करना चाहता है

 var myEdition = {"Edition":{"isbn":"44"}}; 

     var xhrArgs = { 
      url: "http://localhost:8081/LibraryWink/library/editions", 
      postData: dojo.toJson(myEdition), 
      handleAs: "json", 
      headers: { "Content-Type": "application/json"}, 

      load: function(data) { 
       dojo.byId("mainMessageText").innerHTML = "Message posted."; 
      }, 
      error: function(error) { 

       dojo.byId("mainMessageText").innerHTML = "Error :" + error; 
      } 
     }; 

     var deferred = dojo.rawXhrPost(xhrArgs); 

हेडर: { "सामग्री प्रकार": "आवेदन/json"} आवश्यक में हिस्सा इतना है कि मेरी JAX-आर सी सेवा समझता है कि सामग्री JSON है ।

मुझे क्या लगता है कि उपर्युक्त कोड पूरी तरह से काम करता है। हालांकि अगर मैं कहता हूं:

var deferred = dojo.xhrPost(xhrArgs); 

पोस्ट में कोई डेटा प्रेषित नहीं होता है। मेरे पास एक टीसीपी/आईपी मॉनीटर है और यह देख सकता है कि कुछ भी प्रेषित नहीं है।

तो, क्या यह एक बग है, या क्या मैं गलत तरीके से xhrPost() चला रहा हूं? या मैं rawXhrPost() का उपयोग करना चाहिए? यदि उत्तरार्द्ध, हम किस परिस्थितियों में XhrPost के दो स्वादों का उपयोग करते हैं?

उत्तर

13

DOJO 1.4 के रूप में यह काम करना चाहिए:

var myEdition = {"Edition":{"isbn":"44"}}; 

var xhrArgs = { 
    url: "http://localhost:8081/LibraryWink/library/editions", 
    postData: dojo.toJson(myEdition), 
    handleAs: "json", 
    headers: { "Content-Type": "application/json"}, 
    load: function(data) { 
     dojo.byId("mainMessageText").innerHTML = "Message posted."; 
    }, 
    error: function(error) { 

     dojo.byId("mainMessageText").innerHTML = "Error :" + error; 
    } 
}; 

dojo.xhrPost(xhrArgs); 

आप JSON डेटा पोस्ट कर रहे हैं, तो Content-Type हैडर महत्वपूर्ण है। यदि आप इसे नहीं जोड़ते हैं, तो ब्राउज़र 'एप्लिकेशन/एक्स-www-form-urlencoded' के लिए डिफ़ॉल्ट होगा और यूआरएल आपके लिए आपके डेटा को एन्कोड करेगा।

आप Content-Type हैडर (मैं यह कर) लेकिन यह है कि कामकाज से रोक नहीं करता है के लिए एक चारसेट जोड़ सकते हैं:

headers: { "Content-Type": "application/json; charset=utf-8"} 

Firefox 3.6 पर कम से कम, चारसेट स्वचालित रूप से जोड़ा जाता है।

जैसा कि डोम उल्लेख करता है, HTTP पुट समकक्ष dojo.xhrPut है। यहां अंतर यह है कि आपको पोस्टडेटा के बजाय PutData के रूप में अपना अनुरोध बॉडी डेटा जोड़ना होगा।

+0

धन्यवाद, प्रयोग करेगा और रिपोर्ट करेगा। – djna

+0

मुझे लगता है कि आप जिस चार्सेट का उपयोग करना चाहते हैं वह utf-8 नहीं है Uft-8। – Traker

+0

@ ट्रैकर: आप सही हैं। यह अब तय है। – lambacck

3

से दोजो लाइब्रेरी का उपयोग करते समय, मुझे किसी फॉर्म से डेटा पोस्ट करने में कोई समस्या नहीं है (dojo.formToJson() द्वारा क्रमबद्ध डेटा)।

dojo.xhrPut({ 
    putData: dojo.formToJson("locationInformation"), 
    handleAs: "json", 
    load: function(response, ioArgs) { 
     // ... business logic ... 
    }, 
    error: function(message, ioArgs) { alert(message+"\nurl: "+ioArgs.url); }, 
    url: "/API/Location" 
}); 

Firefox में Firebug का उपयोग करना, मैं देख सकता हूँ कि मेरे अनुरोध के रूप में उम्मीद बनाया गया है: Content-Type = application/json; charset=UTF-8

  • रखें अनुरोध के मुख्य भाग::

      अन्य अनुरोध हेडर के अलावा
    • {"postalCode":"h8p3r8","countryCode":"CA"}

    xhrPost/xhrPut rawXhrPost/rawXhrPut के रूप में काम करता प्रतीत होता है ...

  • +0

    कृपया आप स्पष्ट कर सकते हैं - अपने कोड xhrPut() उपयोग कर रहा है, तो आप भी xhrPost साथ यह कोशिश की है()? – djna

    +0

    xhrPost() और "postData" पैरामीटर के साथ पारित डेटा xhrPut() और "putData" पैरामीटर के रूप में काम करता है ... –

    2

    एक और बात जो मैं जवाब जोड़ना चाहता हूं। AJAX ऐप्स के साथ काम करते समय, यह भी एक अच्छा विचार है कि जब आप उम्मीद कर रहे हों तो Accept value को एप्लिकेशन/जेसन पर सेट करना भी एक अच्छा विचार है।

    headers: { "Content-Type": "application/json", "Accept" : "application/json"} 
    
    संबंधित मुद्दे