2013-08-02 5 views
0

Пожалуйста, обратите внимание на следующий код:Как передать результаты запроса в Amchart?

После тега внутри заголовка моего файла

<script> 

var chart; 

var chartData = [{ 
    ConnectionType: "First", 
    NumberPercentage: 1194, 
{ 
    ConnectionType: "Second", 
    NumberPercentage: 1882}, 
{ 
    ConnectionType: "Third", 
    NumberPercentage: 1809}, 
{ 
    ConnectionType: "Fourth", 
    NumberPercentage: 1322}, 
{ 
    ConnectionType: "Fifth", 
    NumberPercentage: 1122}, 
{ 
    ConnectionType: "Sixth", 
    NumberPercentage: 1114}, 
{ 
    ConnectionType: "Seventh", 
    NumberPercentage: 984} 
    ]; 


AmCharts.ready(function() { 
    // PIE CHART 
    chart = new AmCharts.AmPieChart(); 

    // title of the chart 
    chart.addTitle("3D Donut Charts", 16); 

    chart.dataProvider = chartData; 
    chart.titleField = "ConnectionType"; 
    chart.valueField = "NumberPercentage"; 
    chart.sequencedAnimation = true; 
    chart.startEffect = "elastic"; 
    chart.innerRadius = "30%"; 
    chart.startDuration = 2; 
    chart.labelRadius = 15; 

    // the following two lines makes the chart 3D 
    chart.depth3D = 10; 
    chart.angle = 15; 

    // WRITE         
    chart.write("chartdiv"); 
}); 

</script> 

После тега внутри тела тега моего профиля:

<div id="chartdiv" style="width: 100%; height: 362px;"></div> 

Я хочу, чтобы вернуть данные из следующего cfquery в моем файле ColdFusion. Для простоты я упомянул только cfquery для первого подключения. Остальные cfqueries до седьмого одинаковы, кроме имен.

<cfquery datasource = "XX.XX.X.XX" name="qCFCHART"> 
SELECT 
    Count(*) AS TOTAL_CONNECTION 
, Sum(CASE WHEN 'FIRST' = EVENTS THEN 100 END)/Count(*) AS FIRST 
, Sum(CASE WHEN 'SECOND' = EVENTS THEN 100 END)/Count(*) AS SECOND 
, Sum(CASE WHEN 'THIRD' = EVENTS THEN 100 END)/Count(*) AS THIRD 
, Sum(CASE WHEN 'FOURTH' = EVENTS THEN 100 END)/Count(*) AS FOURTH 
, Sum(CASE WHEN 'FIFTH' = EVENTS THEN 100 END)/Count(*) AS FIFTH 
, Sum(CASE WHEN 'SIXTH' = EVENTS THEN 100 END)/Count(*) AS SIXTH 
, Sum(CASE WHEN 'SEVENTH' = EVENTS THEN 100 END)/Count(*) AS SEVENTH 
    FROM MyDatabase; 
</cfquery> 

Учитывая код из вышеприведенного сценария:

ConnectionType: "First", 
NumberPercentage: 1194, 

Я хочу, чтобы отобразить результат, возвращаемый «FIRST» из приведенного выше запроса в моей круговой диаграммы и писать cfdump или что-нибудь ColdFusion, связанной не работать там.

Например:

ConnectionType: "First", 
NumberPercentage: <cfdump var="#qCFCHART.FIRST#>", 

выше выдает ошибку, и я вижу очевидную причину, потому что я внутри тега скрипта, и я задаюсь вопросом, как поступить? Какие-либо предложения?

Вот моя попытка после того, как после некоторых комментариев:

<cfoutput query="qCFCHART"> 
    #currentrow#) 
    <cfloop index="col" list="#columnlist#"> 
      #col#=#qCFCHART[col][currentRow]# 
    </cfloop> 
    <p/> 
</cfoutput> 


<cfset cols = getMetadata(qCFCHART)> 
<cfdump var="#cols#"> 

ответ

0

Что вам нужно сделать, это выходные значения на сторону сервера ColdFusion запроса в вашу стороне клиента JavaScript. например

<cfoutput> 
var chartData = [{ 
    ConnectionType: "First", 
    NumberPercentage: #qCFCHART.FIRST#}, 
{ 
    ConnectionType: "Second", 
    NumberPercentage: #qCFCHART.Second#}, 
{ 
    ConnectionType: "Third", 
    NumberPercentage: #qCFCHART.Third#}, 
{ 
    ConnectionType: "Fourth", 
    NumberPercentage: #qCFCHART.Fourth#}, 
{ 
    ConnectionType: "Fifth", 
    NumberPercentage: #qCFCHART.Fifth#}, 
{ 
    ConnectionType: "Sixth", 
    NumberPercentage: #qCFCHART.Sixth#}, 
{ 
    ConnectionType: "Seventh", 
    NumberPercentage: #qCFCHART.Seventh#} 
    ]; 
</cfoutput> 

Основная причина не мог бы работать ваш cfdump подход, потому что у вас есть синтаксические ошибки здесь:

<cfdump var="#qCFCHART.FIRST#>" 

должен был

<cfdump var="#qCFCHART.FIRST#"> 

Но я настоятельно рекомендую против использования cfdump; просто выведите значение нормально, не должно быть необходимости «выгружать» значения в производственный код.

2

Вам нужно будет запрограммировать запрос и создать структуру данных, похожую на то, что ожидает график - что представляется массивом структур.

Я не дам вам код для этого, так как это довольно простая операция, и вы можете легко найти информацию о том, хотите ли вы ее искать.

Затем вы можете использовать serialzeJSON (данные), чтобы получить версию ваших данных JSON, которая должна иметь такую ​​же структуру, как chartData в вашем примере кода.

+0

Вы упомянули в своем комментарии, что мне нужно сначала запрограммировать запрос, а затем использовать serializeJSON (данные).Однако, если я впервые использую serializeJSON (данные), я могу видеть отформатированные результаты JSON в моем браузере, но все же интересно узнать, как извлечь определенные значения из этого формата. Пожалуйста, дайте мне знать, если я направляюсь в правильном направлении? P.S: У меня нет опыта работы с jQuery, если это необходимо. – Tan

+2

Итак, вы охотно не следовали моему предложению и спрашиваете меня, почему это не сработало? Вы не можете просто выполнить serializeJSON() в своем запросе (что, кажется, вы говорите), и ожидать, что он будет в том же формате, который ожидает ваш график. Вам не нужно использовать jQuery, если вы будете следовать тому, что я сделал, вы можете просто установить значение serializeJSON (data) в переменную JavaScript ' ' –

+0

Я не делал ничего охотно, и мое единственное намерение состояло в том, чтобы прояснить мой вопрос. Я обновил код в своем исходном сообщении, и я вижу массив структур в качестве результата после выполнения ' code. Пожалуйста, дайте мне знать, если я направляюсь в правильном направлении? 2) Если я использую serializeJSON (cols) здесь, тогда он просто отображает массивы структур в формате JSON. Дайте мне знать, если что-то не так, как я делаю. Спасибо – Tan

0

Простое исправление этого вопроса состояло в том, что мне нужно было указать <cfoutput>#serializeJSON(qCFCHART.First)#</cfoutput> после поля Number Percentage, и он отлично работал.

+1

Это очень плохой подход к проблеме, которую вы пытаетесь решить. Скотт дал вам лучший ответ. –