2012-08-16 26 views
26

मैं एंड्रॉइड 2.3.5 के लिए एक एप्लिकेशन लिख रहा हूं (जो आईओएस के साथ भी संगत होगा)। मैं ऐप के एचटीएमएल/जावास्क्रिप्ट से सर्वर पर एक पायथन प्रोग्राम में डेटा स्थानांतरित करना चाहता हूं (जो डेटा को पुनर्प्राप्त करने के लिए ट्विस्ट इंजन का उपयोग करता है)।socket.io - संदर्भ त्रुटि: io परिभाषित नहीं किया गया है

मैंने कई चीजों की कोशिश की है और विभिन्न मंचों, उत्तरों, ट्यूटोरियल और वेब पेजों को देखा है - जिनमें से अधिकांश यहां शामिल हैं - और कोई जवाब नहीं मिल रहा है। यहाँ प्रासंगिक जावास्क्रिप्ट मैं अपने index.html फ़ाइल में है:

<script src="socket-lib/socket.io.js"></script> 
<script type="text/javascript" charset="utf-8"> 
function sendData() { 
    try { 
     var socket = io.connect('http://mywebsite.com:12345'); 
     socket.on('connect', function(data) { 
      socket.send('Hello.'); 
      socket.on('message', function (msg) { 
       socket.send('This is where I send data?'); 
      }); 
     }); 
    } 
    catch(err) { 
     alert('ERROR: socket.io encountered a problem:\n\n' + err); 
    } 
} // end of sendData 

आपको बता नहीं कर सकते हैं, मैं अभी भी बहुत उलझन में यह कैसे काम करता हूँ, मैं कुछ भी परीक्षण नहीं कर सकता। त्रुटि जो आने वाली है ReferenceError: io is not defined है। कुछ साइटों ने var io = require('socket.io'); जैसे कुछ का उपयोग किया। लेकिन फिर यह एक ही त्रुटि में परिणाम: ReferenceError: require is not defined

मैंने सॉकेट-lib फ़ोल्डर को संपत्ति/www में रखा है, जहां कोई अन्य जावास्क्रिप्ट स्रोत जाना चाहिए। यह वह जगह भी है जहां index.html फ़ाइल है। कई साइटें <script src="/socket.io/socket.io.js"></script> का उपयोग करती हैं, लेकिन इससे मुझे कोई समझ नहीं आता है। कई साइटें node.js का उपयोग भी करती हैं, लेकिन मैं इसे कहीं भी नहीं देखता हूं।

मैं यह काम कैसे कर सकता हूं?

उत्तर संपादित करता है:

मैं क्रोम में यह कोशिश की, और यह मेरे socket.io.js फ़ाइल के लिए एक Uncaught ReferenceError: require is not defined दे रहा है। तो मैं इसके ठीक पहले requ.js में स्रोत का फैसला करने का फैसला करता हूं। फिर यह त्रुटि Uncaught Error: Module name "socket.io-client" has not been loaded yet for context देता है। चूंकि मैं इसका उपयोग नहीं कर रहा हूं, मुझे परवाह नहीं है। जब मैं कनेक्शन का प्रयास करता हूं, हालांकि, यह वही io is not defined त्रुटि देता है। जब मैं इसे var io = require('socket.io') के रूप में परिभाषित करता हूं, तो त्रुटि Error: Module name "socket.io" has not been loaded yet for context: _ http://requirejs.org/docs/errors.html#notloaded है। मैंने वेबसाइट पर देखा, और यह मेरी मदद नहीं करता है। जब मैं फ़ंक्शन तर्क के रूप में "आवश्यकता" डालने का प्रयास करता हूं, तो एक और त्रुटि होती है: TypeError: undefined is not a function

+3

मैं किसी हो जाता है, जो बेहद socket.io के दस्तावेज की भयानक कमी से उलझन के लिए, इस सवाल का जवाब मिल गया। आप "/socket-lib/socket.io.js" स्रोत नहीं कर सकते; आपको "http://yourwebsite.com:12345/socket.io/socket.io.js" स्रोत होना चाहिए। सर्वर स्वचालित रूप से आपके लिए बाकी करता है। – Ness

+0

आप मेरे नए पसंदीदा व्यक्ति महोदय हैं! Socket.io पर उनके नमूने बहुत भ्रामक हैं। – Xealgo

+0

प्रलेखन के अनुसार, v1.0 के बाद से आप क्लाइंट लाइब्रेरी को उनके सीडीएन से अनुरोध कर सकते हैं: http: // सॉकेट।आईओ/ब्लॉग/परिचय-सॉकेट-io-1-0/# सीडीएन-डिलीवरी – maxwell2022

उत्तर

49

मुझे किसी ऐसे व्यक्ति का उत्तर मिला जो socket.io के दस्तावेज़ीकरण की भयानक कमी से बेहद उलझन में पड़ता है।

आप /socket-lib/socket.io.js स्रोत नहीं कर सकते,

आप http://yourwebsite.com:12345/socket.io/socket.io.js स्रोत चाहिए।

सर्वर स्वचालित रूप से आपके लिए बाकी करता है।

+1

और यहां उल्लिखित बंदरगाह (12345) कुछ भी नहीं है, जिस पर नोड socket.io – siddhusingh

+0

के साथ चल रहा है, मैं उस पोर्ट को इंगित करने के लिए '/ etc/apache2/httpd.conf' में 'वर्चुअलहोस्ट' बनाना भूल गया था जहां मेरा नोड सर्वर चल रहा था, मेरे मामले में यह ' ...' – mlunoe

+0

मुझे यह त्रुटि मिल रही थी क्योंकि यह पंक्ति है: बकवास की तरह दिख रहा था, क्योंकि जब मैं ताजा एचटीएमएल फाइल में उपयोग करता था - यह काम कर रहा था, लेकिन फिर भागों द्वारा कोशिश की गई - php die() का उपयोग करें और शुरुआत से शुरू करें फ़ाइल - यह तब तक काम कर रहा था जब तक कि मेरी सॉकेट स्क्रिप्ट आवश्यकता के बाद चला गया। js lib। इससे पहले कि यह कोई नुकसान नहीं हुआ लेकिन शायद जब नोड ने कुछ उड़ाया - तोड़ दिया। –

0

ऐसा लगता है कि आपके ब्राउज़र को socket.io.js फ़ाइल नहीं मिल रही है। आप फ़ायरफ़ॉक्स + फ़ायरबग या क्रोम वेब डेवलपर टूल्स के साथ अपने कंप्यूटर पर index.html खोलने का प्रयास कर सकते हैं और देख सकते हैं कि .js फ़ाइल का अनुरोध कैसे किया जाता है। दूसरी तरफ, आप .js फ़ाइल की सेवा करने वाले वेबसर्वर पर लॉग देख सकते हैं कि क्या कोई फ़ाइल त्रुटियों को नहीं मिली है।

require फ़ंक्शन उदा। RequireJS, लेकिन आपको अभी भी काम करने के लिए अपनी स्क्रिप्ट पर पथ को सही तरीके से कॉन्फ़िगर करने की आवश्यकता होगी।

+0

क्या आपके पास कोई अन्य सलाह है? मैं अभी भी यह काम करने के लिए नहीं मिल सकता है। – Ness

+0

वास्तव में आपके कोड और आपकी निर्देशिका संरचना दोनों को देखे बिना, यह कहना मुश्किल है कि क्या गलत है। हो सकता है कि आप कहीं भी अपनी प्रगति अपलोड कर सकें? –

+0

प्रासंगिक सभी कोड पहले से ही पोस्ट किया गया है। समस्या तब बनी रहती है जब अन्य सभी जावास्क्रिप्ट हटा दिए जाते हैं। निर्देशिका संरचना के लिए, यह ग्रहण एसडीके में है, और परियोजना हैलोवर्ल्ड है। फ़ाइल "index.html" और फ़ोल्डर "सॉकेट-lib" दोनों "हैलोवर्ल्ड/संपत्ति/www" में हैं। एकमात्र अन्य महत्वपूर्ण फ़ाइल (मुझे लगता है) जावा फ़ाइल होगी: "हैलोवर्ल्ड/src/com.helloworld.helloworld/Hello.java"। यह डिफ़ॉल्ट रूप से बनाया गया था; एकमात्र चीज जो मैंने वहां की थी, 'setContentView() 'line को' super.loadUrl ("file: ///android_asset/www/index.html") में बदल रहा था; '। – Ness

0

require.js का उपयोग करते हुए कई अन्य पुस्तकालयों के साथ काम करने के लिए socket.io प्राप्त करने पर मुझे एक ही त्रुटि हुई, यह socket.io.js फ़ाइल को उसी/जेएस फ़ोल्डर से लोड करने की कोशिश करने के कारण हुई अन्य फाइलें

बजाय

:

socketio: 'socket.io',

उपयोग

एक अलग फ़ोल्डर में रखने, मेरे लिए यह तय हो गई है, तो आप code in this gist देख सकते हैं लेकिन सभी मैं यह काम करने के लिए बदल गया है, यह था :

socketio: '../socket.io/socket.io',

इस व्यवहार के कारण के बारे में निश्चित नहीं है, लेकिन मुझे उम्मीद है कि यह आपकी मदद करेगा।

+0

स्थापित socket.io पैकेज की फ़ोल्डर संरचना के कारण। यह रूट सर्वर फ़ोल्डर को socket.io पथ पर इंगित करना होगा – kabuto178

0

मैं इस माध्यम से गलती करने में कामयाब रहा, और एक घंटे के बारे में घूमने में कामयाब रहा, जो कि एक बहुत ही बुनियादी त्रुटि साबित हुई।

जब कोई फ़ंक्शन परिभाषित नहीं किया जाता है? जैसे "अनकॉट रेफरेंस एरर: आईओ परिभाषित नहीं है"। क्या इसका मतलब यह नहीं है कि कार्य "निर्मित" होने से पहले "प्रयुक्त" हो रहा है?

मेरी HTML फ़ाइल के भाग में, कि "कॉल" JavaScript फ़ाइलों यह देखा इस तरह:

<script src='./js/playerChatter.js'></script> <!-- this one calls io --> 
<script src="http://localhost:2019/socket.io/socket.io.js"></script><!-- This Creates io --> 

और मैं यह इस

<script src="http://localhost:2019/socket.io/socket.io.js"></script> <!-- This Creates io --> 
<script src='./js/playerChatter.js'></script> <!-- this on calls io --> 
करने के लिए बदल

तो अब आइटम "io", चाहे वह एक ऑब्जेक्ट या फ़ंक्शन है ... वास्तव में बनाया गया ब्योरा है फिर से इसका उपयोग हो रहा है: डी

मज़ा आया है!

0

मेरे लिए सभी उपयोगी सुझावों के माध्यम से डिबगिंग के बाद, यह बस इतना हुआ कि मेरा नोड सर्वर बंद हो गया था। मैं इसे देव के दौरान टर्मिनल विंडो में मैन्युअल रूप से चला रहा था।

सुनिश्चित करें कि आपका नोड [yourservercode] .js निर्दिष्ट पोर्ट पर चल रहा है! : -]

5

मैं इसे अपने आप index.html बदलते बोवर से ग्राहक कब सॉकेट आयात करने के लिए द्वारा हल किया है, पहले मैं स्थापित बोवर घटक:

bower install socket.io-client 

तो मैं करने के लिए index.html में संदर्भ बदल दिया है:

<script src="bower_components/socket.io-client/socket.io.js"></script> 

या फ़ाइल में पाया जा सकता है - lib/socket.io-क्लाइंट/जिले/socket.io.js

0

मैं jspm का उपयोग करें।

इस जोड़ें:

import 'btford/angular-socket-io/mock/socket-io'; 
संबंधित मुद्दे