2012-06-26 18 views
20

मैं इसे स्वीकार करता हूं, मुझे नहीं पता कि मैं क्या कर रहा हूं।

मैं सिग्नलआर का उपयोग करने के तरीके सीखने का प्रयास कर रहा हूं और मैं ऑनलाइन नमूने के विभिन्न नमूनों का पालन कर रहा हूं और मुझे $ चिपकाया नहीं जा सकता है। कनेक्शन को अपरिभाषित किया जा रहा है। मैं एमवीसी 4.0 में काम कर रहा हूं और न्युजेट-डाउनलोड सिग्नलआर जेएस फाइलों या नमूना परियोजनाओं के उन लोगों का उपयोग करने की कोशिश कर रहा हूं। ये मेरी लिपि संदर्भ हैं।

@Scripts.Render("~/Scripts/jquery-1.7.2.min.js") 
@Scripts.Render("~/Scripts/knockout-2.0.0.js") 
@Scripts.Render("~/Scripts/jquery.signalR.js") 
@Scripts.Render("~/signalr/hubs") 

स्क्रिप्ट लोड करने लगते हैं - मैं भी उनमें से शुरू जो आग पर अलर्ट कर दिया गया है, लेकिन $ .connection हमेशा अनिर्धारित रहता है।

घटनाओं की एक विचित्र मोड़ में, मेरे पास एक अलग परियोजना है जहां मैं एक अलग jQuery लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं और यह $ का उपयोग करता है। और वह वस्तु हमेशा अनिश्चित है।

मैं बस गलत क्या कर रहा हूं के बारे में कोई भी संभावित स्पष्टीकरण की तलाश कर रहा हूं। अग्रिम में ही बहुत शुक्रिया।

+0

हम की थोड़ी सी भी निशान के बिना मदद करने वाले हैं कैसे प्राप्त कोड? – Cranio

+3

क्या आपके पास पृष्ठ पर दो बार jQuery शामिल है? – davidfowl

उत्तर

8

मैंने समस्या हल की। मुझे पता है मैंने क्या किया लेकिन मुझे नहीं पता कि यह निश्चित रूप से क्यों काम करता है।

मैं _Layout.cshtml दृश्य के शीर्ष पर मुख्य jquery लाइब्रेरी (संस्करण 1.7.2) का संदर्भ दे रहा था, लेकिन किसी भी अन्य jquery स्क्रिप्ट का संदर्भ नहीं दे रहा था। मुझे लगता है कि लेआउट में डिफ़ॉल्ट रूप से यह देखने के तल पर

@Scripts.Render("~/bundles/jquery") 

लोड हो रहा था और यह कि एक स्क्रिप्ट अनुभाग है कि नीचे स्थित था देखने देखा।

@RenderSection("scripts", required:false) 

दिखाया के रूप में मैं आगे मेरी स्क्रिप्ट संदर्भ बदल गया है और मेरी स्क्रिप्ट संदर्भ मेरे विचार पर एक

@section scripts 
{  
    @Scripts.Render("~/Scripts/jquery.signalR-0.5.1.js") 
    @Scripts.Render("~/Scripts/jquery.color.js") 
    @Scripts.Render("~/signalr/hubs") 
    @Scripts.Render("~/Scripts/blasht.signalr.js") 
} 

आवरण के अंदर उपरोक्त प्रश्न में दिखाया गया है, ताकि वे के बाद बंडलों लोड किया गया शामिल किया जाएगा डाल दिया। मुझे लगता है कि मैं सभी जरूरी jquery लोड नहीं कर रहा था क्योंकि अब यह काम करता है।

अब अगर मैं यह समझ सकता हूं कि यह मेरी अन्य परियोजनाओं पर कैसे लागू होता है।

3

इस काम का कारण जावास्क्रिप्ट फ़ाइलों को लोड करने के क्रम के कारण है। यदि आप jquery लोड करने से पहले jquery.signalR-0.5.1.js को आजमाते हैं और लोड करते हैं, तो आपको $ .connection को अपरिभाषित करना होगा क्योंकि इसके लिए jquery को पंजीकृत करने के लिए पहले लोड किया जाना चाहिए। _Layout.cshtml टेम्पलेट में स्क्रिप्ट आदेश

@Scripts.Render("~/bundles/jquery") 

@RenderSection("scripts", required: false) 
अपने किसी भी दृश्य के अंदर

तो आप स्क्रिप्ट धारा के तहत signalr लोड कर सकते हैं में लोड और यह ठीक काम करना चाहिए।

44

मुझे आज भी यही समस्या है।

आपके उत्तर ने मुझे सही दिशा में इंगित किया, क्योंकि मेरे पास स्क्रिप्ट लोडिंग के लिए एक ही सेटअप था।

मेरे पास निम्नलिखित क्रम में पृष्ठ (शीर्ष) के शीर्ष पर मेरे सभी स्क्रिप्ट टैग थे।

  • JQuery
  • SignalR
  • /signalr/केन्द्रों
  • मेरी स्क्रिप्ट।js

और बेशक, @ Layout.cshtml तो <body> टैग के तल पर @Scripts.Render("~/bundles/jquery") जोड़ने के लिए विचारशील था।

यहां क्या हो रहा है।

इस कॉन्फ़िगरेशन में, जब पृष्ठ लोड होता है, तो यह निर्दिष्ट किए गए क्रम में, मुख्य टैग में सभी स्क्रिप्ट लोड करता है।

इसलिए यह JQuery लोड करता है, फिर सिग्नलआर, जो $.connection सेटअप करता है, फिर ऑटो-जनरेटेड हब्स स्क्रिप्ट जो $.connection.hubName सेट करता है, फिर साइट की कस्टम स्क्रिप्ट।

इस बिंदु पर आपका कस्टम कोड चलता है। लेकिन कुछ बिंदु पर अपने कोड, $.connection

इस घटना आग तक पहुँचने से पहले समय तक body.onload या document.onReady के लिए इंतजार कर रहा है, स्क्रिप्ट बंडल जो लेआउट टेम्पलेट बॉडी टैग भी डाउनलोड और कार्यान्वित के अंत में आप के लिए गयी। इस बंडल में jquery लाइब्रेरी फिर से है .... जो $ पर सिग्नलआर सेटअप सबकुछ रीसेट करता है और अब आपके $.connection को अब परिभाषित नहीं किया गया है।

कैसे यह

आसान फिक्स का समाधान करने के लिए, सुनिश्चित करें कि आप JQuery दो बार लोड नहीं, एक बार SignalR से पहले और एक बार SignalR के बाद करते हैं। मैंने अपनी सभी स्क्रिप्ट को बंडल के बाद लोड करने के लिए स्थानांतरित कर दिया और इस मुद्दे को ठीक किया। यहां सबसे अच्छा अभ्यास टेम्पलेट द्वारा प्रदान की गई 'स्क्रिप्ट' अनुभाग का उपयोग करना है।

@section scripts{ 
    @*/* load your scripts here. You can exclude jQuery, 
     coz it's already in the template */ *@ 
} 

तो यह एक SignalR त्रुटि बिल्कुल नहीं है ...

मेरे जीवन के 2 घंटे है यही कारण है कि ... मैं कभी नहीं वापस मिल जाएगा ...

आशा है कि यह मदद करता है।

+1

बहुत बढ़िया, धन्यवाद। अभी भी काम नहीं करता है लेकिन यह मुझे करीब आता है (कंसोल में कोई और त्रुटि नहीं)! – user1477388

+1

ओह भगवान ..... उत्तर के लिए धन्यवाद :) – Dzhambazov

+0

यू रॉक मैन ... !! यह काम करता है और उन मूल्यवान "अन्य डेवलपर्स के 2 घंटे एक ही मुद्दे के साथ सहेजता है":) – Kings

2

मुझे एक ही समस्या है। मेरे लिए मैंने पृष्ठ में 2 बार और बाद में लेआउट में jquery 2 बार शामिल किया है। उनमें से एक को हटा दिया गया मुद्दा हल किया गया।

आशा है कि यह मदद करता है

0

यह मुझे क्या हुआ क्योंकि मैं गतिशील jquery.signalR-1.1.4.js स्क्रिप्ट लोड करने से पहले ~/signalr/hubs स्क्रिप्ट लोड।

जब गतिशील लोड हो रहा है, कोई त्रुटि मौजूद था, लेकिन अगर मैं ~/signalr/hubs के उत्पादन में ले लिया और मेरे क्रोम देव उपकरणों में चिपकाया, मैंने एक त्रुटि संदेश VM1047:18 Uncaught Error: SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/hubs. at <anonymous>:18:15 at <anonymous>:300:2

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