2013-04-09 2 views
0

В настоящее время я использую FusionCharts Free для заполнения некоторых диаграмм.FusionCharts PHP с Ajax

В main.php:

<html> 
<head> 
    <script language="JavaScript" src="FusionCharts/FusionCharts.js" ></script> 

    <script language="JavaScript"> 
     function ajax(divID) 
     { 
      if (window.XMLHttpRequest) 
       xmlhttp=new XMLHttpRequest(); 
      else 
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 

      xmlhttp.onreadystatechange=function() 
      { 
       if (xmlhttp.readyState==4 && xmlhttp.status==200) 
        document.getElementById(divID).innerHTML=xmlhttp.responseText; 
      } 

      return xmlhttp; 
     } 

     function detailedChart(couID) 
     { 
      xmlhttp = ajax("detailedDiv"); 
      xmlhttp.open("GET", "getDetailedResult.php?couID=" + couID, true); 
      xmlhttp.send(null); 
     }  
    </script> 
</head> 

<body> 
    <?php 
     $strDataURL = "GetResult.php"; 
     echo renderChart("FusionCharts/FCF_Column3D.swf", $strDataURL, "", "Chart1", 600, 300); 
    ?> 

    <div id="detailedDiv" align="center"></div> 

</body> 
</html> 

В GetResult.php:

if ($result)  
    $chart -> addDataFromDatabase($result, "TOTAL", "NAME", "", "JavaScript:detailedChart('##ID##')"); 

В GetDetailedResult.php

<?php 
    $chart -> newFusionCharts("Column3D", "900", "500"); 
    $chart -> setSWFPath("FusionCharts/"); 
    $chart -> setChartParams("caption=...."); 
    $chart -> addDataFromDatabase($result, "TOTAL", "NAME"); 
    $chart -> renderChart(); 
?> 

Проблема теперь я хотел бы создать детализацию от GetResult до GetDetailedResult с помощью ajax, но он покажет мне «Диаграмма». вместо графика. Если я изменю

$ chart -> renderChart(); to $ chart -> renderChart (true);

это покажет мне bgcolor = "".

Почему это происходит и как я могу его решить? Есть ли еще один простой способ заполнить detailChart через ajax?

Миллион спасибо.

ответ

0

Если вы исследуете, вы увидите, что вы получаете HTMLDIV) и SCRIPT (некоторые кода JavaScript, чтобы сделать диаграмму в DIV) в вашем responseText.

Теперь, когда вы устанавливаете responseText как innerHTML из HTML-элемента, то HTML DOM парсер добавляет и отображает HTML часть (DIV с текстом chart). Тем не менее, он не выполняет SCRIPT части (которая предназначена для визуализации диаграммы внутри DIV замены chart текста.

Идеальный способ для достижения рендеринга, чтобы выполнить SCRIPT.

Это хорошо управляется, если вы используете jQueryajax функцию, что-то подобное:

function detailedChart(couID) { 
     jQuery.ajax({ 
      url: "getDetailedResult.php?couID=" + couID, 
      success: function(responseText) { 
       jQuery("#detailedDiv").html(responseText); 
      } 
     }); 

    } 

ПРИМЕЧАНИЕ: Вам необходимо загрузить JQuery файл в расслоение плотной головки HTML

+0

. Благодарим за введение jQuery. С этим все становится проще. Я думаю, я должен лучше понять, как все это работает до кодирования. Спасибо ^^ – noobie