2009-07-06 4 views
1

Ich brauche dringend Hilfe und in mehreren Schritten so lassen Sie uns diesen Schritt durch Schritt Ich möchte flicht und MySQL plotten Graph verwenden, aber eine Ausnahme auftrittProblem Graph mit flicht

getData.php

 $sql = mysql_query("SELECT count(Msg_ID) as msgCount,From_user 
          FROM Messages 
          GROUP BY From_user"); 

      echo "["; 
    while($result = mysql_fetch_array($sql)) 
    { 
    //print_r($result); 
    echo "[".$result['msgCount'].",".$result['From_user']."]"."\n"; 

    } 

    echo "]"; 

Und zum Plotten

<div id="plotarea" style="width:600px;height:300px;"> 

        <script type="text/javascript"> 

      var options = { 
        lines: { show: true }, 
        points: { show: true }, 
        xaxis: { min:0,max:5 }, 
        yaxis: { min:1 ,max:60}, 
       }; 

    $.ajax({ 
          url:"getData.php", 
          type:"post", 
          success:function(data) 
          { 
            alert(data); 
            $.plot($("#plotarea"),data,options); 
            //alert(data); 
          } 
        }) 
        </script> 

    </div> 

Kann mir jemand sagen, was mit diesem Code Als nächstes wollen falsch i Diagramm mit einer der Achsen ist die Zeit

+0

Was ist die Ausnahmemeldung –

+0

abgefangene Ausnahme: Eine ungültige oder illegale Zeichenfolge war angegeben (NS_ERROR_DOM_SYNTAX_ERR) [Break auf diesen Fehler] ctx.arc (axex.p2c (x) ... y) + Offset, Radius, 0, Math.PI, false); – Sarah

Antwort

1

Erstens sieht es so aus, als ob die JavaScript-Liste, die Sie mit Ihrem PHP-Code erstellen, nicht jedes Punktelistenelement durch ein Kommatrennzeichen trennt.

Gemäß der jQuery $.ajax documentation das erste Argument der Funktion übergeben wird successdie Daten vom Server zurückgegeben, formatiert gemäß dem ‚datatype‘ Parameter. Sie haben keinen dataType Parameter angegeben. Die Dokumentation sagt, dass es intelligent entweder ResponseXML oder ResponseText an Ihren Erfolg Callback übergeben wird, basierend auf dem MIME-Typ der Antwort, wenn keine dataType angegeben wurde.

Ich vermute, dass die Daten, die an die Plotfunktion übergeben werden, eine einfache alte Zeichenkette anstelle eines JavaScript-Listenobjekts sind, wie von Flot erwartet. Hinzufügen einer dataType: 'json' Option zu Ihrem $.ajax Anruf sollte dies beheben.

+0

Sorry Mann, ich habe JSON hinzugefügt, aber es hat den Trick keine anderen Vorschläge – Sarah

+0

Haben Sie einen Breakpoint mit Ihrem Debugger in der Zeile gesetzt, die den Plotaufruf macht und das Datenobjekt inspiziert, um zu bestätigen, dass es im richtigen Format für Flot ist? –

+0

Wird mir jemand helfen oder was? – Sarah

6

Das obige wird Probleme mit der Kommatrennung beseitigen

Als nächstes wird das javascript:

<script type="text/javascript"> 
    $(function() { 
      var options = { 
        lines: { show: true }, 
        points: { show: true }, 
        xaxis: { min:0,max:5 }, 
        yaxis: { min:1 ,max:60}, 
       }; 

    $.get("getData.php", function(data){ 
          $.plot($("#plotarea"),data,options); 
         }, 
       json); 
    }); 
    </script> 

Beachten Sie, dass ich $.ajax-$.get geändert, da Sie keine Daten von der Seite an das Skript vorbei waren, ist ein Post nicht erforderlich. Und wenn Sie $.get verwenden, werden alle Einstellungsnamen angenommen.

Beachten Sie auch, dass ich das Skript aus dem HTML gezogen und es in die JQuery window.onload Syntax: $(function() {. Dies würde in den Kopf Ihres HTML gehen.

Von dem, was ich sagen kann, brauchen Sie nicht wirklich Ajax, da Sie kein Ereignis definiert haben, das die Funktion $ .ajax auslösen würde. Es sieht aus wie Sie Ajax verwenden ein Skript aufrufen, wenn Sie nur das Skript in das gleiche Skript setzen könnte, die die Seite lädt, wie:

<?php 
$sql = mysql_query("SELECT count(Msg_ID) as msgCount,From_user 
          FROM Messages 
          GROUP BY From_user"); 

    while($result = mysql_fetch_array($sql)) 
    { 
    $user_data[] = array($result['msgCount'],$result['From_user']); 
    } 
    ?> 

    <script type="text/javascript"> 
    $(function() { 
      var options = { 
        lines: { show: true }, 
        points: { show: true }, 
        xaxis: { min:0,max:5 }, 
        yaxis: { min:1 ,max:60}, 
       }; 

    var userposts = <?php echo json_encode($user_data); ?>; 

    $.plot($("#plotarea"),userposts,options); 

    </script>  
    <style type="text/css"> 
    #plotarea { 
     width: 600px, height: 300px; 
    } 
    </style> 
    </head> 
    <body> 
    .....//Put whatever before the div 
    <div id="plotarea"></div> 
    .....//Finish up the page. 
0

Was Sie ausgeben möchten, ist ein json Dokument in der php Seite, die direkt zu einem Java-Skriptarray (entweder manuell oder automatisch von Bibliotheken wie jquery) geparst wird.

So gibt es keine Notwendigkeit, json in PHP zu drucken, stattdessen können Sie einfach Daten in ein PHP-Array einspeisen und den json_encode verwenden Funktion, um es einfach in eine JSON-Zeichenfolge zu konvertieren.

Ein kleines Beispiel könnte helfen Sie wurden zur Ausgabe versucht

echo "[". $ Result [ 'MsgCount']. "". $ Result [ 'FROM_USER']. "]". "\ n";

die in Java-Skript [] = Array und Sie erstellen [[]] = Array innerhalb Array. Aber wenn das Array groß ist, ist es schwer in PHP zu echo. Was machen wir? Eine Array-Struktur ist in PHP ähnlich. Sie müssen Daten in PHP als "Array innerhalb Array" hinzufügen zB: php Array (Array (1,2,3)) = [[1,2,3]]. Wie es zu json zuordnen?

leicht ==> echo json_encode (array (array (1,2,3));

Prost