2012-08-04 18 views
20

सर्वर से क्लाइंट से Socket.io के साथ जावास्क्रिप्ट ऑब्जेक्ट कैसे भेजें? मैं वेबसेट के रूप में सॉकेट.ओ का उपयोग कर रहा हूं (.send() के साथ भेज रहा हूं और message ईवेंट के साथ सुनें)। जब मैं सर्वर साइड पर की तरह कुछ करने के लिए कोशिश कर रहा हूँ:सॉकेट.io जावास्क्रिप्ट ऑब्जेक्ट को कैसे भेजें

var myObject = { 
    message: 'Hello World!' 
} 

socket.send(myObject); 

क्लाइंट-साइड पर मैं हो रही है केवल इस स्ट्रिंग: [object Object]

उत्तर

35

आप वास्तव में के बजाय एक घटना का उत्सर्जन करने की जरूरत है:

socket.emit('yourEvent', myObject); 

आप .send() उपयोग करते हैं, तो आप बस अपने वस्तु है, जो जहां समस्या उत्पन्न हो रही है की स्ट्रिंग प्रतिनिधित्व भेज रहे हैं। ध्यान दें कि आप .send() का उपयोग कर सकते हैं, लेकिन आपको पहले ऑब्जेक्ट JSON-encode करना होगा, और इसे रिसेप्शन पर डीकोड करना होगा।

जब तक आपके पास कोई विशिष्ट कारण न हो, तो मानक सॉकेट.आईओ .emit() विधि का उपयोग करना सबसे अच्छा है, क्योंकि यह आपके लिए यह सब कुछ करता है। यही वह है जो इसके लिए है।

4

socket.send() ऑब्जेक्ट को समझ में नहीं आता है लेकिन यह JSON के साथ आनंद लेता है। आप इस तरह से उपयोग कर सकते हैं:

socket.send(JSON.stringify(myObject)); 

और JSON.parse(json) का उपयोग JSON पार्स करने के लिए वस्तु के लिए।

9

मैं बस कुछ पुराने उदाहरण का उपयोग करके इस मुद्दे में भाग गया। यहां मैंने जो जवाब पाया है: Migrating 0.6 to 0.7+, जिसे मैं नीचे पुन: उत्पन्न करता हूं।


v0.6 में, socket.send स्वचालित रूप से JSON के {a: 'b'} की तरह एक वस्तु में बदल सकते हैं। आप क्लाइंट को डेटा भेज देंगे:

socket.send({a: 'b'}); 

हालांकि यह अच्छा है, यह एक मौलिक समस्या है। JSON न केवल वस्तुओं को एन्कोड करता है, बल्कि स्ट्रिंग्स, संख्याएं इत्यादि भी! इसलिए, यदि आप स्पष्ट रूप से बताते हैं कि आप जेएसओएन पास करना चाहते हैं तो एपीआई अधिक स्पष्ट है (क्योंकि एन्कोडिंग/डीकोडिंग जेएसओएन के साथ एक प्रदर्शन जुर्माना है)।

v0.7 में, json ध्वज का उपयोग करें:

socket.json.send({a: 'b'}); 

अब आप भी फेंकना और ब्राउज़र और सर्वर के बीच कस्टम घटनाओं प्राप्त कर सकते हैं: घटनाओं के लिए

socket.emit('my_event', {a: 'b'}); 

तर्क JSON में एन्कोड करने के स्वचालित रूप से आपके लिए

4

अपने सर्वर साइड

socket.json.send({ your : 'data' });

पर इस का उपयोग कर प्रयास करें और अपने क्लाइंट-साइड पर JSON.parse() विधि।

+0

मेरे एंड्रॉइड-क्लाइंट को भेजते समय मेरे लिए एक आकर्षण की तरह काम करता है, चीयर्स! – Jack

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