运行通过ajax加载的谷歌可视化(javascript)

时间:2012-04-09 16:14:21

标签: ajax jquery google-visualization

长时间听众,第一次来电。对ajax并不擅长。据推测,我在做一些非常密集的事情:

尝试运行使用ajax响应中的html返回的google可视化,但即使我可以在firebug的xhr响应中看到代码,但从ajax页面加载时它也不会运行。

直接访问response2.php?var = X并且它工作正常,因此可能这不是代码本身输出的问题。

(我在ajax页面的标题和response2.php之间移动了jsapi和google.load(可视化),无论如何都没有成功)

ajax电话

$.ajaxSetup ({
    cache: false
});

$.ajax ({
    type: "GET",
    url: "return2.php",
    data: "council=Leeds City Council",
    dataType: "html",
    success: function (responseText) { 
      document.getElementById('result').innerHTML = responseText;
    }
});

return2.php

<?php
$docKey = "0Aqk6sC3LBlfjdHUxRDIycjlSM3NvX0JCWnhxUjRUbFE";
$docQuery = $_GET['council'];
?>
<script type="text/javascript">
function drawVisualization() {
google.visualization.drawChart({
   "containerId": "councilViz",
   "dataSourceUrl": "http://spreadsheets.google.com/a/google.com/tq?key=<?php echo   $docKey; ?>",
   "query":"SELECT A,B,C WHERE A CONTAINS '<?php echo $docQuery; ?>'",
   "chartType": "Table",
   "options": {
      "width": 560,
      "height" : 200
   }
 });
}
google.setOnLoadCallback(drawVisualization);
</script>
<div id="councilViz">
<?php echo $docQuery; ?>
</div>

response2.php获取GET变量,运行google电子表格api查询并返回以下代码:

ajax回复

<script type="text/javascript">
  function drawVisualization() {
    google.visualization.drawChart({
   "containerId": "councilViz",
   "dataSourceUrl": "http://spreadsheets.google.com/a/google.com/tq?key=0Aqk6sC3LBlfjdHUxRDIycjlSM3NvX0JCWnhxUjRUbFE",
   "query":"SELECT A,B,C WHERE A CONTAINS 'Leeds City Council'",
   "chartType": "Table",
   "options": {
      "width": 560,
      "height" : 200
   }
 });
  }
  google.setOnLoadCallback(drawVisualization);
</script>
<div id="councilViz">
Leeds City Council</div>

尽我所能,当ajax调用代码时,我无法获取表格。我可以看到结果,但可以看到可视化脚本。

非常感谢,

A

1 个答案:

答案 0 :(得分:0)

你需要创建div来插入返回的html,使用.innerHTML将你的html插入到div中。

然后使用.appendChild将div附加到dom中的目标。

通过设置元素的innerHTML属性添加的脚本不会被执行。

function addScript(responseText)

    {
        var newdiv = document.createElement('div');
        newdiv.innerHTML = responseText;
        document.getElementById('target').appendChild(newdiv);
    }