2010-09-15 20 views
7

Questo errore viene visualizzato solo se provo a inserire due grafici nella stessa pagina. Entrambi i grafici funzionano perfettamente se sono l'unico nella pagina. Nel momento in cui aggiungo il secondo, viene caricato solo il primo e viene visualizzato l'errore "Query mancante per ID richiesta: 0".
Ecco il mio file js per il grafico:Google Charts - "Query mancante per ID richiesta: 0"

function drawChart(title, queryPage, divToFill) { 
var dataTab = null; 
var query = new google.visualization.Query(queryPage); 
var strSQL = "SELECT *"; 

query.setQuery(strSQL); 

query.send(processInitalCall); 

function processInitalCall(res) { 
    if(res.isError()) { 
     alert(res.getDetailedMessage()); 
    } else { 
     dataTab = res.getDataTable(); 

     // Draw chart with my DataTab 
     drawChart(dataTab); 
    } 
} 

function drawChart(dataTable) { 
    // Draw the chart 
    var options = {}; 
    options['title'] = title; 
    options['backgroundColor'] = "#8D662F"; 
    var colors = Array(); 
    var x = 0; 
    if(currentCampaignId >= 0) { 
     while(x < dataTab.getNumberOfColumns() - 2) { 
      colors[x] = '#c3c1b1'; 
      x++; 
     } 
     colors[x] = '#d2bc01'; 
    } 
    else { 
     colors[0] = '#c3c1b1'; 
    } 
    options['colors'] = colors; 
    options['hAxis'] = {title: "Week", titleColor: "white", textColor: "white"}; 
    options['vAxis'] = {title: "Flow", titleColor: "white", textColor: "white", baselineColor: "#937d5f", gridColor: "#937d5f"}; 
    options['titleColor'] = "white"; 
    options['legend'] = "none"; 
    options['lineWidth'] = 1; 
    options['pointSize'] = 3; 
    options['width'] = 600; 
    options['height'] = 300; 
    var line = new google.visualization.LineChart(document.getElementById(divToFill)); 
    line.draw(dataTab, options); 
} 
} 

Ecco un elemento di cattura dal file index.php:

<body> 
<script type="text/javascript"> 
google.load('visualization', '1', {'packages': ['table', 'corechart']}); 
google.setOnLoadCallback(function(){ 
drawChart("Water", "waterData.php", "water"); 
drawChart("Air", "airData.php", "air"); 
}); 

</script> 
<div id="water" style="text-align: center;"></div> 
<div id="air" style="text-align: center;"></div> 
</body> 

getta l'errore proprio sulla linea query.send(processInitalCall);, solo sulla seconda ora si chiama. Sia waterData.php che airData.php sono identici ad eccezione del campo sig. Ho notato che c'era un campo chiamato reqId ed è impostato su 0.

Devo in qualche modo modificare questo reqId in queste classi?

risposta

12

probabilmente è troppo tardi, ma per chiunque sia interessato ...

Durante il caricamento dei dati dall'origine dati, ci sarà un parametro GET nella richiesta - tqx - con un valore del tipo: "reqId: 0 ". È necessario restituire lo stesso reqId nella risposta.

Da the docs:

reqId - [Required a richiesta; L'origine dati deve gestire] Un identificativo numerico per questa richiesta. Viene utilizzato in modo tale che se un client invia richieste multiple prima di ricevere una risposta, l'origine dati può identificare la risposta con la richiesta corretta. Invia questo valore di nuovo nella risposta .

+0

sto ottenendo questo errore e la mia reqId partite. –

+1

Mi rendo conto che questo è vecchio ma volevo scrivere per dire che questo mi ha aiutato immensamente e mi ha portato a realizzare un problema altrimenti intrattabile con il mio uso della libreria gviz python. Grazie!! – mszaro

0

Non ho abbastanza stato in StackOverflow per scrivere un commento, ma questo thread mi ha salvato un'immensa quantità di tempo. GRAZIE

google visualization multiple charts with own data queries

+0

Sei più che benvenuto a chiedere e rispondere alla domanda qui, presto guadagnerai abbastanza rappresentante per lasciare commenti (anche se "grazie" non è un buon commento - dovresti solo votare su buone risposte) – Leeor

+0

Grazie, ma io sono neanche "abbastanza vecchio" per votare in StackOverflow! Oltre a dire "grazie", ho lasciato un link al mio problema che risolve questo problema. –

+0

Ora sei, divertiti :) – Leeor