2010-03-26 14 views
7

JQuery.AJAX फ़ंक्शन के डेटा टाइप विकल्प के लिए, मुझे बाइट सरणी या ब्लॉब को संभावनाओं में से एक के रूप में नहीं दिखाई देता है।JQuery.AJAX - क्या मेरा सर्वर डेटा का एक ब्लॉब लौटा सकता है?

मैं इसे कैसे प्राप्त कर सकता हूं ताकि मेरा सर्वर एक एजेक्स कॉल के परिणामस्वरूप बाइट सरणी वापस कर सके?

मैं ब्लॉब को टेक्स्ट में परिवर्तित कर सकता हूं, लेकिन मैं कॉम्पैक्टनेस के लिए जा रहा हूं।

संपादित करें: ब्लॉब उपयोगकर्ता को नहीं दिखाया जाएगा। मेरी जावास्क्रिप्ट इसे देखेगी और इससे एक ऑब्जेक्ट तैयार करेगी। यह लगभग 50 केबी ब्लॉब है, और गति महत्वपूर्ण है, इसलिए अगर मुझे ऐसा करने की ज़रूरत नहीं है तो मैं कोई ब्लोट नहीं जोड़ना चाहता हूं।

संपादित करें: मेरा डेटा पूर्णांक की एक सरणी है। बेस 64 एन्कोडिंग एक संभावना है, लेकिन मैं ब्लोट जोड़ने की इच्छा नहीं रखूंगा। अगर ऐसा करने का कोई तरीका नहीं है, तो मुझे लगता है कि मैं बस बेस 64 को एन्कोड करता हूं।

+0

आपको शायद अपने बाइनरी डेटा को 'सामान्य' फ़ाइल में 'मास्क' करने के लिए PHP या एएसपी का उपयोग करने की आवश्यकता होगी, जो आपके जावास्क्रिप्ट को डीकोड करता है। – thecoshman

+1

क्या आप वाकई ऐसा करना चाहते हैं? क्या ब्लॉब की एक आईडी (यदि यह डेटाबेस में है) का उपयोग करना बेहतर नहीं है और फिर उस पर क्लिक करने वाले उपयोगकर्ता को फ़ाइल की सेवा करें, या आईडी उपलब्ध होने पर बाइट्स को किसी अन्य माध्यम से प्रस्तुत करें? –

+0

@ शेरविन मैं ब्लॉब में हेरफेर करना चाहता हूं और इसे पुनर्प्राप्त करने के बाद एक ऑब्जेक्ट बना सकता हूं। यह उपयोगकर्ता को नहीं दिखाया जाएगा। – Kyle

उत्तर

3

संपादित करें: टिप्पणी चर्चा के आधार पर, मैं अपना उत्तर संशोधित करना चाहता हूं। यदि आप पूर्णांक की सरणी पारित कर रहे हैं, और इसे अपने सर्वर-साइड पर उस प्रारूप में प्राप्त कर सकते हैं, तो वहां से आपको इसे JSON में बदलना चाहिए। JSON पूर्णांक गुजरने का समर्थन करता है, jQuery आसानी से जेएसओएन प्राप्त करने का समर्थन करता है। ints की एक सरणी के लिए

नमूना JSON:

{ 
"array": [0, 1, 2, 3, 4, 5] 
} 

नमूना जावास्क्रिप्ट/jQuery कोड पुन: प्राप्त करने कि JSON के लिए:

$.getJSON('/url/to/binary/data/returning/json', 
    function(data) { 
     // access the array this way: 
     var array = data.array; 
     var first = array[0]; 
     // so here you can do whatever your code needs with that array 
    } 
); 

पुरानी सुझाव

जब मैं टिप्पणीकर्ताओं से सहमत ऊपर, मेरा मानना ​​है कि ऐसा करना संभव होना चाहिए। एक बेस 64 एन्कोडर/डिकोडर jQuery plugin है जो आपके डेटा को स्थानांतरित करने में मदद कर सकता है। (bloat का थोड़ा सा कारण, यह सच है)। यदि आप अपनी सरणी को बेस 64 एन्कोड करते हैं, तो आप इसे स्थानांतरित करने में सक्षम होना चाहिए।

यदि आप बस बाइनरी डेटा डाउनलोड करना चाहते हैं (इसे प्रदर्शित नहीं करते हैं), तो एप्लिकेशन/ऑक्टेट-स्ट्रीम पर अपनी प्रतिक्रिया का एमआईएमई प्रकार सेट करें और उचित ब्राउज़र हैंडलिंग के लिए अनुलग्नक नाम दें।

$.get('/url/to/binary/data', 
    function(data) { 
     // convert binary data to whatever format you would like to use here with 
     // an encoded string, have the browser download, call 
     // a helper function, etc. 
    } 
); 

आप अन्य प्रारूपों कि अधिक बार HTTP (या किसी अन्य परिवहन प्रोटोकॉल का उपयोग कर यदि आवश्यक हो तो) के माध्यम से स्थानांतरित कर रहे हैं पर देख रहे हैं, हालांकि, आप क्या करना कोशिश कर रहे हैं पर निर्भर करता है पर विचार कर सकते।

+0

क्या आप एमआईएमई प्रकार को 'application.octet-stream' में सेट करने का उदाहरण दे सकते हैं। – thecoshman

+0

तो, यदि मैं एमआईएमई प्रकार को एप्लिकेशन/ऑक्टेट-स्ट्रीम पर सेट करता हूं, तो आपके कोड स्निपेट में 'डेटा' वैरिएबल में यह होगा? क्या 'डेटा' वैरिएबल बाइट सरणी प्रकार का होगा? – Kyle

+0

@thecoshman - PHP का उपयोग करने के बाद से सालों रहे हैं, इसलिए मुझे यकीन नहीं है कि PHP में सर्वर से HTTP शीर्षलेख कैसे सेट अप करें। ऐसा लगता है कि एक Google खोज PHP मैनुअल को समझाए जाने के लिए पॉइंटर्स प्रदान करती है। – justkt

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