2011-03-10 14 views
5

मैं इस कोड (नीचे) है ..jQuery AJAX एन्कोडिंग डेटा

$.ajax 
({ 
    type: "POST", 
    url: "../WebServices/Feedback.svc/sendfeedback", 
    dataType: 'json', 
    async: false, 
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + encodeURIComponent(note) + '", "code" : "' + code + '", "permission" : "' + permission + '"}', 
    contentType: "application/json; charset=utf-8" 
}); 

मैं एक वेब सेवा करने के लिए डेटा में पारित करने के लिए इस का उपयोग कर रहा है, लेकिन समस्या यह है कि क्या इस तरह वहाँ में किसी भी वर्ण (कर रहे हैं, /?: @ & = + $ #)। मैंने एक एन्कोडुरिकॉम्पोनेंट रखा है जो ठीक काम करता है और फिर वेब सेवा में मैंने उन्हें फिर से रखा।

मैं क्या पूछ रहा हूं कि यह पूरा करने का एक बेहतर तरीका है? यह थोड़ा पागल मैं इसे माध्यम से गुजर से पहले स्ट्रिंग हर बार सांकेतिक शब्दों में बदलना करने के लिए है कि लगता है ..

धन्यवाद

+0

कारण है कि यह पागल प्रतीत होता है? डेटा को सुरक्षित रूप से स्थानांतरित करना सामान्य नहीं है? – yoavmatchulsky

+0

तो आप क्या कह रहे हैं कि ये वर्ण वेब सेवा से गुजरने के लिए सुरक्षित नहीं हैं? वे क्या नुकसान कर सकते हैं? – tmutton

+2

$ .ajax स्वचालित रूप से एन्कोडिंग करने जा रहा है, है ना? –

उत्तर

4

वेब सेवा आप से संबंधित है या आप किसी और के वेब सेवा का उपयोग कर रहा है? वेब सेवा स्वीकार करने का कारण क्या था (, /?: @ & = + $ #)?

jQuery $ .ajax डिफ़ॉल्ट contentType आवेदन/x-www फार्म-urlencoded जो मतलब jQuery सामग्री सांकेतिक शब्दों में बदलना होगा। हालांकि, चूंकि आपने अलग-अलग सामग्री निर्दिष्ट की है, इसलिए डेटा एन्कोड नहीं किया गया है, इसलिए आपको अपना एन्कोडिंग करना होगा।

वैकल्पिक रूप से, आप contentType विकल्प को दूर करने के लिए प्रयास करें और (encodeURICompnent के बिना) सामान्य रूप से अपनी सामग्री को प्रेषित कर सकता है।

$.ajax 
({ 
    type: "POST", 
    url: "../WebServices/Feedback.svc/sendfeedback", 
    dataType: 'json', 
    async: false, 
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + note + '", "code" : "' + code + '", "permission" : "' + permission + '"}', 
}); 
+0

मैंने अभी इसे फिर से परीक्षण किया है और यह काम नहीं कर रहा है .. मैंने बिल्कुल उपर्युक्त कोड (सामग्री प्रकार के बिना) की कोशिश की है और वर्णों वाली एक स्ट्रिंग में पारित किया है (, /?: @ & = + $ #) और अभी भी कोई खुशी नहीं है। कोई विचार? – tmutton

+0

समस्या अब विशेष पात्र नहीं है लेकिन नई लाइन या रिटर्न। अगर मैं पाठ में वापसी रेखा डालता हूं तो यह वेब सेवा पर पोस्ट नहीं करता है। क्या इसके लिए कोई त्वरित समाधान है? – tmutton

+0

तो आपने विशेष पात्रों को ठीक किया है। कोड को देखे बिना मैं इतना यकीन नहीं कर सकता कि यह आपकी वेब सेवा पर पोस्ट क्यों नहीं कर रहा है। इसे आज़माएं, नेट पैनल को सक्रिय करें (फायरबग के साथ, टैब ** नेट ** के तहत) और AJAX अनुरोध करें, देखें कि सर्वर वापस त्रुटि कोड क्या है। – suhendri

10

एक स्ट्रिंग के बजाय एक वस्तु के रूप के माध्यम से पारित डेटा:

$.ajax 
({ 
... 
data: {stars: stars, rating: rating...(etc)} 
}); 
+0

यह मेरे लिए काम किया। यदि मैंने डेटा के लिए एक क्वेरी स्ट्रिंग का उपयोग किया था और इसमें एक + था, तो यह एक स्थान बन जाएगा जब मेरी सर्वलेट ने इसे पुनर्प्राप्त किया था, भले ही मैंने सामग्री को नहीं बदला था, इसलिए इसे एन्कोड करना चाहिए था। जब मैं ऊपर इस विधि में बदल जाता हूं, तो मेरा सर्वलेट डेटा में + सही ढंग से देखता है। – mikato