2008-12-01 12 views
6

मैंने हाल ही में Winamp Song Requester स्थापित किया है जो एक न्यूनतम Win CG सर्वर के साथ एक Winamp वेब गीत अनुरोधक प्लगइन है।

प्लगइन क्या करता है यह एक वेब सर्वर चलाता है, कुछ विशेष चर के साथ एक HTML पृष्ठ परोसता है जिसमें यह अनुरोध पर वास्तविक डेटा (प्लेलिस्ट, अनुरोध कतार, गीत आदि में छोड़ा गया समय) के साथ प्रतिस्थापित करता है।

मैंने इसे कुछ jQuery सीखने के लिए एक मजेदार और अच्छी परियोजना के रूप में देखा, इसलिए मैंने प्लगइन से सेवा की गई वेबसाइट को बदलने, ठीक करने और अजेक्स करने के लिए अपना स्वयं का जेएस कोड जोड़ना शुरू कर दिया लेकिन अब मैं चरित्र एन्कोडिंग के साथ एक समस्या में भाग गया ।

पृष्ठ पर आपको प्लेलिस्ट में सभी गीतों के लिंक मिलते हैं। जब आप किसी एक लिंक पर क्लिक करते हैं तो मैंने अपना स्वयं का jQuery क्लिक फ़ंक्शन लगाया। तो जब आप किसी गीत का अनुरोध करते हैं तो पूरे पृष्ठ को पुनः लोड करने की बजाय मैं $ .get ($ (this) .attr ('href', फ़ंक्शन (प्रतिक्रिया) {... कोड ...}) करता हूं और फिर मैं प्रतिस्थापित करता हूं फ्लाई पर आपके अनुरोध के साथ नई जेनरेट की गई कतार के साथ वर्तमान कतार को प्रतिस्थापित करें। मैं वर्तमान में खेलना और खोज पर दिखाने/अपडेट करने के लिए वही काम करता हूं ताकि पृष्ठभूमि में सबकुछ प्राप्त हो और फिर कुछ एनिमेशन के साथ फ्लाई पर बदल दिया जाए।

सभी jQuery/अजाक्स अच्छा काम करता है, लेकिन बड़ी समस्या मेरे पास है चारसेट साथ और कतार/प्लेलिस्ट में गीत नामों के साथ है। नामों में विशेष वर्ण (åäöé आदि) बिल्कुल काम नहीं करता है।

प्लगइन आईएसओ -885 9 -1/लैटिन 1 में सब कुछ आउटपुट करता है और मार्कअप में मेरा मेटा टैग ब्राउज़र को बताता है कि यह पृष्ठ लैटिन 1 है। सामान्य पृष्ठ पर वें रीफ्रेश करें ई ब्राउज़र यह अच्छी तरह से काम करता है और विशेष वर्ण सामान्य के रूप में प्रदर्शित होते हैं। लेकिन जब मैं फ्लाई पर कोड के ब्लॉक को प्रतिस्थापित करने के लिए jQuery और $ .get() का उपयोग करता हूं तो विशेष वर्ण केवल दिखाए जाते हैं?

मुझे लगता है कि समस्या उस jQuery डिफ़ॉल्ट में निहित है यह मानने के लिए कि $ .get() प्रतिक्रिया यूटीएफ -8 है यदि कोई हेडर अन्यथा कहता है। प्लगइन एन्कोडिंग/वर्णसेट के लिए कोई हेडर सेट नहीं करता है और चूंकि मेरे पास बैकएंड पर कोई नियंत्रण नहीं है और कौन से हेडर सेट हो जाते हैं, मैं इसे बदल नहीं सकता।

केवल हेडर मैं प्लगइन से जवाब में मिलता है:

सर्वर: WinampServer
कनेक्शन: करीब
सामग्री प्रकार: पाठ/html

मुझे आशा है कि आप समझ मेरी समस्या। मेरे पास एक ऐसा पृष्ठ है जहां मेरे पास बैकएंड पर कोई नियंत्रण नहीं है और मुझे केवल जेनरेट किया गया HTML है। मैं प्रतिक्रियाओं में हेडर बदल या जोड़ नहीं सकता। मुझे jQuery को बताने की ज़रूरत है कि प्रतिक्रिया वास्तव में लैटिन 1 में है और यूटीएफ -8 नहीं है ताकि विशेष पात्रों का एन्कोडिंग टूट न जाए। मैंने स्क्रिप्ट चार्सेट की कोशिश की है: 'iso-8859-1' jQuery में AJAXSetup लेकिन यह केवल टाइप स्क्रिप्ट/जेसन के साथ काम करता है और मैं HTML प्रतिक्रियाओं के साथ काम कर रहा हूं।

कोई विचार अगर यह संभव है या कोई अन्य कामकाज जिसके बारे में आप सोच सकते हैं?

उत्तर

28

संपादित: ठीक है, मैं इस काम करता है लगता है (कम से कम यह मेरे परीक्षण वातावरण में काम किया, पिछले प्रयास के लिए संशोधन को देखने)

$.ajaxSetup({ 
    'beforeSend' : function(xhr) { 
     xhr.overrideMimeType('text/html; charset=UTF-8'); 
    }, 
}); 
$('#stuff').load('/yourresource.file'); // your ajax load 

मैं क्या था डेटा फ़ाइल UTF-8 में सेट मुख्य फ़ाइल और था ISO-8859-1 में सेट करें। उपर्युक्त कोड के बिना, मुझे परीक्षण स्ट्रिंग åäöé के लिए कचरे का एक गुच्छा मिला, जैसा कि अपेक्षित था।इसके बाद के संस्करण कोड के साथ, यह åäöé उचित रूप से इनकोडिंग भरी हुई।

+0

मुझे लगता है कि बहुत कोशिश की है लेकिन यह है कि मदद करने के लिए प्रतीत नहीं होता। मुझे लगता है कि केवल वांछित डेटा भेजने पर एन्कोडिंग सेट, नहीं डेटा पर एन्कोडिंग जवाब में वापस प्राप्त किया। –

+1

मुझे लगता है कि इस नई विधि – Owen

+0

ओह काम करना चाहिए, तुम बहुत बहुत बहुत बहुत धन्यवाद। यह एक आकर्षण की तरह काम करता है। मैं हारने और स्वीकार करने के लिए तैयार था कि मेरी समस्या को हल करना संभव नहीं था। अलग-अलग चीजों को आजमाने और समाधान के लिए गुगल करने में काफी समय लगा। जब मैं charset iso-8859-1 पर सेट करता हूं तो आपका पहले सेडेंड अच्छा काम करता था। –

0

सबसे पहले, यह बेहतर होगा आप अधिक सामान्य $ .ajax() फ़ंक्शन का उपयोग किया है जाएगा।

documentation के अनुसार वहाँ scriptCharset विकल्प है, हालांकि यह कुछ डेटा प्रकार में लागू है। यह भी कहा गया है कि यह केवल तभी जरूरी है जब कॉलिंग पेज का एन्कोडिंग अलग हो।

0

यह सिर्फ यह इंगित करने के लिए है कि ओवरराइड माइम टाइप() विधि गीको-आधारित ब्राउज़र (फ़ायरफ़ॉक्स, ...) में उपलब्ध है, यह IE (कम से कम < = 7) में नहीं है, और ऐसा प्रतीत होता है कोई कामकाज नहीं (मैं अन्य ब्राउज़र में उपलब्धता के बारे में पता नहीं है।)

संबंधित मुद्दे