My Python code calculate coordonates of devices and put it in a list. So i get a list of list in a python var
my_devices_list = [ ["name1", 11.1, 22.2] , ["name2", 33.3, 44.4] ]
i’m trying to pass this list to my JS code
my python code :
@app.route('/map') def map(): my_devices_list = [ ["name1", 11.1, 22.2] , ["name2", 33.3, 44.4] ] return render_template('map.html', data=my_devices_list)
my JS code :
someJavaScriptVarTabAll = '{{ data }}'; alert(someJavaScriptVarTabAll)
the alert I get from the JS alert :
[['name1', 11.1,22.2], [['name2', 33.3, 44.4]]
What i would like to do: a for loop to place waypoints on my map like:
{% for device in data %} wayPointOnMap = (name = device[0], coord_x = device[1], corrd_y = device[2]) {% endfor%}
I know that the following code works, but i can’t get a loop that way
someJavaScriptVar0 = '{{ data[0] }} '; someJavaScriptVar1 = '{{ data[1] }} '; someJavaScriptVar2 = '{{ data[2] }} '; alert(someJavaScriptVar0 ) alert(someJavaScriptVar1 ) alert(someJavaScriptVar2 )
I try to pass the list from the python code using json.dumps(), but i can’t loop on it in my JS code
@app.route('/map') def map(): my_devices_list = [ ["name1", 11.1, 22.2] , ["name2", 33.3, 44.4] ] return render_template('map.html', data=json.dumps(my_devices_list))
Thanks for your help!!
Advertisement
Answer
Instead of attempting to format the list as an array in the JS file, you can send a request to the web app via AJAX to get the proper json
ified response. First, update your routes to include another route that receives the AJAX request and returns the result:
@app.route('/map') def map(): return render_template('map.html') @app.route('/get-map', methods=['POST']): def get_map(): return flask.jsonify({'map':[ ["name1", 11.1, 22.2] , ["name2", 33.3, 44.4] ]})
Then, in your JS file (after adding <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
) to your HTML header):
$.ajax({ url: "/get-map", type: "POST", data: {}, success: function(response) { //response.map stores the map array for (var [v1, v2, v3] of response.map){ console.log(v1) console.log(v2) console.log(v3) } } });