2012-08-23 126 views
2

我正在使用Google圖表(termcloud)顯示一些數據。當我嘗試加載圖表,並通過AJAX其資產似乎只是不斷拋出一個錯誤,我能得到這個工作的罰款,頁面上的靜態功能,但是:TypeError:使用ajax時google.load不是函數

'TypeError: google.load is not a function' 

這裏是我的ajax功能:

$("li.contentpanel").click(function() { 

$("#content-panel").show(); 

$('#content-panel').animate({ 
    width: '540' 
}, 500, function() { 
    var dataString = 'alert=1'; 
    $.ajax({ 
    type: "POST", 
    url: "<?php echo site_url($topicmaplink);?>", 
    data: dataString, 
    cache: false, 

    success: function(html){ 
     $("#content-panel #inner").html(html); 
    } 
}); 

});

這是被稱爲頁:

(JSAPI和termcloud插件文件在這個頁面的頂部加載)

$(function() { 

    google.load("visualization", "1"); 
    google.setOnLoadCallback(draw); 
    function draw() { 
    data = new google.visualization.DataTable(); 
    data.addColumn('string', 'Label'); 
    data.addColumn('number', 'Value'); 
    data.addColumn('string', 'Link'); 
    data.addRows(<?php echo sizeof($topics);?>); 
    <?php 
    $trans = array("ã" => "a", "³" => "3", "º" => "0", "â" => "a", 
     "¡" => ";", "'" => "", "\n" => "",'"' => ''); 
    shuffle($topics); 
    for($j=0;$j<sizeof($topics);$j++){ 
     $nonforeignkeyword = strtr($topics[$j]['keyword'],$trans); 
     $totalnumber = $topics[$j]['occurrence']; 
     echo 'data.setValue('.$j.', 0, "'.trim($nonforeignkeyword).'");'; 
     echo 'data.setValue('.$j.', 1, '.$totalnumber.');'; 
     echo 'data.setValue('.$j.', 2, "'.$partlink.'/searchterm||'.trim(rawurlencode($nonforeignkeyword)).'");'; 
    } 
    ?> 
    var outputDiv = document.getElementById('cp-tmap'); 
    var tc = new TermCloud(outputDiv); 
    tc.draw(data, null); 
    } 
}); 

即使當我從頁面移除JSAPI和termcloud js文件通過ajax調用並將它們放置在它被調用到頁面的同一頁面上似乎重定向到google.com並掛在空白頁面上。

有沒有人知道我在哪裏錯了嗎?

在此先感謝您的幫助

回答

2

解決了這個問題,對於誰可能有同樣的問題的人。取消了對的google.load和setOnLoadCallback並在自己的回調函數放置在這些之後,數據表已經繪就:

<pre> 
<code> 
    //google.load("visualization", "1"); 
    //google.setOnLoadCallback(draw); 
    function draw() { 
    data = new google.visualization.DataTable(); 
    data.addColumn('string', 'Label'); 
    data.addColumn('number', 'Value'); 
    data.addColumn('string', 'Link'); 
    data.addRows(<?php echo sizeof($topics);?>); 
    <?php 
    $trans = array("ã" => "a", "³" => "3", "º" => "0", "â" => "a", "¡" => ";", "'" => "", "\n" => "",'"' => ''); 
    shuffle($topics); 
    for($j=0;$j<sizeof($topics);$j++){ 
     $nonforeignkeyword = strtr($topics[$j]['keyword'],$trans); 
     $totalnumber = $topics[$j]['occurrence']; 
     echo 'data.setValue('.$j.', 0, "'.trim($nonforeignkeyword).'");'; 
     echo 'data.setValue('.$j.', 1, '.$totalnumber.');'; 
     echo 'data.setValue('.$j.', 2, "'.$partlink.'/authorname||'.trim(rawurlencode($nonforeignkeyword)).'");'; 
    } 
    ?> 
    var outputDiv = document.getElementById('cp-tmap'); 
    var tc = new TermCloud(outputDiv); 
    tc.draw(data, null); 
    } 


$(document).ready(function(){ 
    setTimeout(function(){ 
     google.load("visualization", "1",{"callback" : draw}); 
    }, 100); 
}); 
</code> 
</pre> 
+0

http://stackoverflow.com/questions/15575354/google-load-never- calls-callback鏈接中問題的答案似乎解決了這個問題。 – user2418202

0

我有一個類似的問題在我的繪製函數無法找到它一直在尋找的元素對於。它似乎對失敗:

document.getElementById('map-canvas'); 

我發現是google.load("visualization", "1");必須調用document.write這意味着DOM是完全空的,當我想抓元素的原因。

我通過將google.load到index.html的固定它,可視化加載之前就得到了我的draw()函數

相關問題