3

Googleチャート(termcloud)を使用していくつかのデータを表示しています。これはページの静的機能として正常に機能しますが、ajaxを介してチャートとそのアセットを読み込もうとすると、エラーがスローされ続けるようです。

'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);
  }
});

ajaxを介して呼び出されているページからJSAPIファイルとtermcloudjsファイルを削除し、それらをページに呼び出されているのと同じページに配置しても、google.comにリダイレクトされ、空白のページにハングアップするようです。

私がここでどこが間違っているのか誰か知っていますか?

助けてくれてありがとう

4

3 に答える 3

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> 
于 2012-08-29T10:48:25.497 に答える
0

描画関数が探している要素を見つけることができなかったという同様の問題がありました。失敗しているように見えました:

document.getElementById('map-canvas');

要素を取得しようとしたときにDOMが完全に空だったことを意味するgoogle.load("visualization", "1");呼び出しが必要であるという理由がわかりました。document.write

google.loadをindex.html に入れて修正したので、 draw( ) 関数に到達する前にビジュアライゼーションがロードされました

于 2015-04-27T22:19:41.563 に答える