Ajax json query direkt zu python generiert html wird undefiniert

Ich habe schon drei Wochen gekämpft und bin in der Sackgasse. Sysadmins sind s * tty Entwickler 🙂

Ich versuche, leichte Cgi-Bin-Python-Skripte zu erstellen, um Daten zu sammeln und sie in das Json-Format umzuwandeln. Dann benutze ich eine einfache HTML-Seite, um ajax-Abfrage zu python-Skripten zu machen, um Daten zu erhalten und meine Charts zu zeichnen (in regelmäßigen Abständen Leute lieben Real-Time-Sachen)

Diese sollten so leicht wie möglich sein, weil sie auf Himbeere arbeiten.

Einer meiner Python-Skripte, die die Daten sammelt

#!/usr/bin/python import sqlite3 import gviz_api # enable debugging import cgitb cgitb.enable() def dict_factory(cursor, row): d = {} for idx, col in enumerate(cursor.description): d[col[0]] = row[idx] return d connection = sqlite3.connect("templog.db") connection.row_factory = dict_factory cursor = connection.cursor() cursor.execute("select temp, status from data where ID = (select MAX(ID) from data)") # fetch all or one we'll go for all. results = cursor.fetchall() connection.close() schema = {"temp": ("number", "temp"),"status": ("number", "status")} data = results # Loading it into gviz_api.DataTable data_table = gviz_api.DataTable(schema) data_table.LoadData(data) json = data_table.ToJSon(columns_order=("temp", "status"),order_by="temp") #print results #print "Content-type: application/json\n\n" print "Content-type: application/json" print print json 

Das funktioniert wie ein Charme, wenn ich es auf meinem Browser eröffne und es gibt mir was ich im korrenten Format für Google jsapi brauche

 {"rows":[{"c":[{"v":21.062},{"v":0}]}],"cols":[{"type":"number","id":"temp","label":"temp"},{"type":"number","id":"status","label":"status"}]} 

Unten ist meine html, die die json-Daten aus python-Skript benötigt, um das Diagramm zu zeichnen

  <html> <head> <!--Load the AJAX API--> <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript"> // Load the Visualization API and the piechart package. google.load('visualization', '1', {'packages':['corechart']}); // Set a callback to run when the Google Visualization API is loaded. google.setOnLoadCallback(drawTable); function drawTable() { var jsonData = $.ajax({ type: "GET", url: "http://192.168.1.123:8099/cgi-bin/test.py", dataType:"json", async: false }).responseText; alert(jsonData); // Create our data table out of JSON data loaded from server. var data = new google.visualization.DataTable(jsonData); // Instantiate and draw our chart, passing in some options. var chart = new google.visualization.LineChart(document.getElementById('chart_div')); chart.draw(data, {width: 400, height: 240}); } </script> </head> <body> <!--Div that will hold the pie chart--> <div id="chart_div"></div> </body> </html> 

Leider habe ich "undefined" Alarm, wenn html macht ajax Abfrage direkt zu python Skript.

Dann habe ich kopiert json Ausgang 1: 1 auf einfache statische HTML-Datei und ersetzt ajax URL zu .html anstelle von dynamischen .py, und es funktioniert.

Meine Frage ist – gibt es einige Einschränkungen für das, was ich versuche zu tun oder gibt es etwas falsch mit meinem Code?

Mein Code basiert auf den Beispielen https://developers.google.com/chart/interactive/docs/php_example https://developers.google.com/chart/interactive/docs/dev/gviz_api_lib

  • TCP Server / Client: [Errno 32] Zerbrochenes Rohr
  • Wie man an JSON eine Liste von Modellobjekten in django / python serialisiert
  • Wie lese ich ein einfaches Json Ergebnis (von Google Taschenrechner) in Python?
  • Erstellen Sie verschachtelte JSON aus CSV
  • Wie benutzt man flask.jsonify und macht eine Vorlage in einer Flaschenroute
  • Übergeben von Objekten von Django zu Javascript DOM
  • Ist ein Json naiv in eine Python-Klasse oder struct secure?
  • Python menschlich lesbare Objekt Serialisierung
  • One Solution collect form web for “Ajax json query direkt zu python generiert html wird undefiniert”

    Wenn ich dein Javascript richtig lese, wird die responseText-Eigenschaft erst nach Abschluss der Anfrage gesetzt . Normalerweise werden diese Dinge asynchron ausgeführt, so dass Sie eine Funktion aufrufen, die aufgerufen werden soll, nachdem die Daten empfangen wurden. z.B

     function drawTable() { var drawChart = function(jsonData) { // Create our data table out of JSON data loaded from server. var data = new google.visualization.DataTable(jsonData); // Instantiate and draw our chart, passing in some options. var chart = new google.visualization.LineChart(document.getElementById('chart_div')); chart.draw(data, {width: 400, height: 240}); }; $.ajax({ type: "GET", url: "http://192.168.1.123:8099/cgi-bin/test.py", dataType:"json", async: false }).done(drawChart); } 

    Weitere Beispiele finden Sie in der jquery ajax Dokumentation .

    Python ist die beste Programmiersprache der Welt.