LSpreee: AJAX request - Aufgerufenes soll Graphen produzieren

Beitrag lesen

Moin!

Moin!

Hey, stehe gerade etwas auf dem Schlauch.

Habe eine html-Seite (sagen wir page.html), welche eine JS-funktion anstößt (button, Funktion MakeRequest()), die einen AjaxRequest zu einem php-Skript startet (batch.php). Jenes php-Skript öffnet eine CSV-Textdatei und baut mit dem Prototype-Framework einen svg-Graphen aus den Werten der Textdatei. Der standardmäßige Return des Prototype-Frameworks ist sowas wie:

...viel zuviel HTML-Code, der für Ajax nicht geeignet ist.

Von welchem html-Code sprichst Du denn?

Von deinem.

Aso.

Das ganze HTML gehört schon von Anfang an in deine HTML-Seite, dann existiert auch schon direkt der Platz, wo die Grafik erscheinen wird.

Dort kann m.E. nur die div schon erscheinen, mit der ID whiteboard. Die Daten für die Graphik sind ja dynamisch.

Nicht wirklich. Die Grafikausgabe setzt sich zusammen aus vorbereitenden Arbeiten mittels Javascript, und der dann generierten, wohl dynamischen, Datensammlung für die eigentliche Grafik. Die Grafikerstellung ist aber, davon gehe ich jedenfalls aus, fix, nur die Daten ändern sich.

Ja. Der Knackpunkt ist "..., und der dann generierten, ...". Um dies zu generieren, muss der JS Code mal ausgeführt werden. Doch ein echo "<scri..." im mittels Ajax aufgerufenen php-Script wirft den Code ja nur zurück an die Funktion handleRequest, wo ich dat nich ausgeführt bekomme.

Der Ajax-Request sollte nur die Daten als JSON besorgen, und wenn die Daten da sind, wird der Malprozess mit den Daten aufgerufen, und die Grafik erscheint.

Ich verstehe das langsam. Aber ich würde doch gerne wissen, wie ich JS vom batch.php interpretieren kann. Bin mittlerweile auf ein flashbasiertes Chartplotting Framework umgestiegen, dass sich ebenfalls mit JS und xml sehr komfortabel steuern lässt. Sehr zu empfehlen: AmCharts

Hier mal ein Beispiel, wie dann demnächst mein Code aussieht:

<script type="text/javascript">  
  
            var params =  
            {  
                bgcolor:"#FFFFFF"  
            };  
  
            var flashVars =  
            {  
                path: "/amcharts/amcharts/flash/",  
                settings_file: "/amcharts/basicSamples/sampleData/mica_line_settings.xml",  
                data_file:     "/amcharts/basicSamples/sampleData/mica_line_data.xml"  
            };  
  
            // change 8 to 80 to test javascript version  
            if (swfobject.hasFlashPlayerVersion("8"))  
            {  
                swfobject.embedSWF("/amcharts/amcharts/flash/amline.swf", "chartdiv", "600", "400", "8.0.0", "../../amcharts/flash/expressInstall.swf", flashVars, params);  
            }  
            else  
            {  
                var amFallback = new AmCharts.AmFallback();  
                // amFallback.settingsFile = flashVars.settings_file;  		// doesn't support multiple settings files or additional_chart_settins as flash does  
                // amFallback.dataFile = flashVars.data_file;  
                amFallback.chartSettings = flashVars.chart_settings;  
                amFallback.pathToImages = "/amcharts/amcharts/javascript/images/";  
                amFallback.chartData = flashVars.chart_data;  
                amFallback.type = "line";  
                amFallback.write("chartdiv");  
            }  
  
        </script>

Ich weiß nicht, wie ich das alles in JSON packen soll und denke auch, es geht leichter. Da hier aber zusätzlich die eigentlichen Graphikdaten in den xml's liegen, kann ich die eher mit php bearbeiten/erstellen und die ganze Funktion kann von Anfang an in der handleRequest stehen...?!?

Dies würde bedeuten in das Prototype Framework einzugreifen, richtig? Sagen wir mal, wenn das nicht in meiner Absicht liegt, kann man das dann anders lösen? Um das Framework zu nutzen muss dieser JavascriptCode irgendwann einmal ausgeführt werden, um die svg-Daten zu produzieren.

Ich kenne Prototype als Javascript-Framework, serverseitig tut das nix. Insofern ist Prototype nicht für dein derzeitiges HTML verantwortlich, sondern dort ist lediglich eine HTML+Javascript-Ausgabe versammelt, die eine Grafik malt, und die lädst du per Ajax, anstelle mit einem normalen Browser-Request.

... wo er eben nicht interpretiert wird :(

Insofern vermute ich: Das Datensammeln und -ausgeben hat mit Prototype nichts zu tun und kann auch geändert werden (auf JSON), und wenn das so ist, dann kann auch das Einfügen der Daten in die Darstellungsroutine geändert werden (indem die Daten aus JSON als Parameter in eine Darstellungsfunktion eingefügt werden, welche dann alles tut, was zum Zeichnen der Grafik nötig ist).

Hat am Ende den Vorteil, dass die Datenmenge kleiner bleibt.

Da hast Du bestimmt Recht.

  • Sven Rautenberg