2011-04-05 6 views
7

मुझे उसी त्रुटि मिल रही है जैसा कि this question में देखा गया है जिसके लिए कोई जवाब नहीं है। विस्तृत करने के लिए, मैं अपने कोड में this demo लोड करने का प्रयास कर रहा हूं। मैंने इसे थोड़ा बदल दिया है कि मैं किसी भी हेडर टैग में उनके कोड को शामिल नहीं कर रहा हूं - यह विशेष कोड खंड jQuery द्वारा लोड किया जाएगा। वैसे भी, तो मेरा कोड इस तरह दिखता है:Google को Google विज़ुअलाइजेशन API का उपयोग करके परिभाषित नहीं किया गया है; संभवतः jQuery की गलती

<script type='text/javascript' 
     src='https://www.google.com/jsapi?key=ABQIAAAAKl2DNx3pM....'> 
</script> 

<script type='text/javascript'> 

function drawChart() { 
    var data = new google.visualization.DataTable(); 
    data.addColumn('string', '', 'Country'); 
    data.addColumn('number', 'Population (mil)', 'a'); 
    data.addColumn('number', 'Area (km2)', 'b'); 
    data.addRows(5); 
    data.setValue(0, 0, 'CN'); 
    data.setValue(0, 1, 1324); 
    data.setValue(0, 2, 9640821); 
    data.setValue(1, 0, 'IN'); 
    data.setValue(1, 1, 1133); 
    /* ... */ 
    var chart = new google.visualization.IntensityMap(
        document.getElementById('chart_div')); 
    chart.draw(data, {}); 
} 

$(document).ready(function() { 
    google.load('visualization', '1', {packages:['intensitymap']}); 
    google.setOnLoadCallback(drawChart); 
}); 
</script> 

कोड का यह अनुभाग एक div में निहित है जिसका दृश्यता आवश्यकतानुसार टॉगल की जाती है। अजाक्स कॉल के परिणामस्वरूप पूरा लॉट (यहां पूरा पृष्ठ) वापस कर दिया गया है।

jQuery का $(document).ready() हैंडलर का उपयोग करने वाला सिद्धांत यह है कि दस्तावेज़ तैयार होने पर Google को लोड किया जाना चाहिए। चाहे वह खंड के अंदर ready() है या नहीं की परवाह किए बिना

Google is not defined error message screenshot.

:

हालांकि, मैं इस हो रही है। अब यहाँ असली किकर है: डोम एक्सप्लोरर में, मैंने कहा वस्तु पा सकते हैं:

So google does actually exist. This picture proves it.

किसी को भी कृपया सबसे पहले यह क्यों हो रहा है मेरे लिए व्याख्या कर सकते हैं और फिर इसे ठीक करने के लिए मुझे क्या करना?

एक बेवकूफ प्रकार जावास्क्रिप्ट डेवलपर होने के नाते, मैंने अपने हेड टैग में Google स्क्रिप्ट्स को शामिल करने का प्रयास किया। उसके बाद this question ($ परिभाषित नहीं किया गया) जैसे कुछ उत्पादित किए गए सिवाय इसके कि हम Google से jQuery लोड नहीं कर रहे हैं, हम इसे स्थानीय रूप से होस्ट कर रहे हैं।

हम सफलतापूर्वक इस तरह के अन्य jQuery एक्सटेंशन इनलाइन के साथ-साथ jQuery कोड के अतिरिक्त हिस्सों को लोड करते हैं, इसलिए मेरे दिमाग में यह काम करना चाहिए। मुझे नहीं पता कि jQuery Google के रास्ते में जा रहा है या इसके विपरीत, लेकिन वे नहीं होना चाहिए।

विचार?

उत्तर

9

$ (दस्तावेज़) को हटा रहा है। पहले से ही आपकी समस्या को ठीक करना चाहिए। मैं अपने कोड की कोशिश की और $ (document) .ready बाहर टिप्पणी के बाद, यह काम किया:

//$(document).load(function() { 
    google.load('visualization', '1', {packages:['intensitymap']}); 
    google.setOnLoadCallback(drawChart); 
//}); 

अब क्यों यह मामला है के लिए के रूप में, मैं नहीं जानता कि ... किसी भी मामले में, आप की जरूरत नहीं होनी चाहिए document.ready को google.load पर कॉल करने के लिए प्रतीक्षा करें; google.load यह सुनिश्चित करेगा कि जब तक आपके कॉलबैक ड्रा चार्ट को कॉल किया जाता है, तो इसे निष्पादित करना सुरक्षित होगा।

+0

धन्यवाद @Karl, मैं कोशिश की है वह भी हालांकि मुझे डर लग रहा; कुछ समस्या, एक ही लक्षण। मैंने इस धारणा पर दस्तावेज़ तैयार मार्ग को नीचे चला गया कि मुझे Google की सामग्री को लोड करने की प्रतीक्षा करने की आवश्यकता है ... –

+2

आहा मैंने इसे ठीक कर दिया है - उन वस्तुओं को ' 'टैग में होना चाहिए और जैसा कि आप कहते हैं, मैं नहीं करता '$ (दस्तावेज़) की आवश्यकता नहीं है। पहले से ही() '। एक टिक है –

+2

"क्यों" के लिए: Google का स्क्रिप्ट लोडर स्क्रिप्ट को गतिशील रूप से लोड करने के लिए 'document.write' का उपयोग करता है। जब यह स्थगित हो जाता है, या तो लोड/डोमरेड इवेंट का उपयोग करके, या 'सेटटाइमआउट' का उपयोग करके, वर्तमान दस्तावेज़ ओवरराइट किया जाएगा, अपना कोड तोड़ देगा - [संबंधित उत्तर] (http://stackoverflow.com/a/9748617/938089?रहस्यमय वस्तु नहीं करता है-समर्थन-यह-methoderror-इन-IE8-ऑन-गूगल लोड)। –

4

पृष्ठ लोड होने के बाद आप चार्ट लोड कर सकते हैं लेकिन विशेष कॉलबैक के साथ।

google.load ("विज़ुअलाइज़ेशन", "1", {"कॉलबैक": ड्राचर्ट});

https://developers.google.com/loader/#Dynamic

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