从javascript访问python对象列表

时间:2017-05-17 16:40:47

标签: javascript python json flask

我正在使用flask和python来构建一个Web应用程序。 我在python中有一个json可解析的类

class uItem:
   itemCount = 0

   def __init__(self, id, name):
      self.id = id
      self.name = name

我需要从html

访问该类的对象列表

这是我创建对象并使它们成为json可解析的地方

from delClass import uItem

counter = 0
name = ["proudct1","product2","product3"]
objarray = []

for n in name:
    obj = uItem(counter, n)
    r = json.dumps(obj.__dict__)
    counter = counter + 1
    objarray.append(r)

这是我加载索引页面的地方

@app.route('/', methods=['GET', 'POST'])
def main():
    return render_template('jsex.html', dlist=objarray)

我收到错误说

  参数列表

之后

未捕获的SyntaxError:missing)

Thisis the error that i am getting 我该如何解决。 是从javascript访问python列表的更好方法吗?

1 个答案:

答案 0 :(得分:0)

显然,这一行是根本原因

var counts = JSON.parse("["{\"id\": 0, \"name\": \"product1\"}", "{\"id\": 1, \"name\": \"product2\"}", "{\"id\": 2, \"name\": \"product3\"}"]");

要解决此问题,请使用flask.jsonify

from flask import jsonify

@app.route('/', methods=['GET', 'POST'])
def main():
    return jsonify(objarray)

json回归将是这样的:

[
  "{\"name\": \"proudct1\", \"id\": 0}",
  "{\"name\": \"product2\", \"id\": 1}",
  "{\"name\": \"product3\", \"id\": 2}"
]

使用jsonify后,您不再需要JSON.parse了。 Ajax get / post的结果都是javascript对象。这是nodejs中javascript的示例代码。

var axios = require('axios');
axios.get('http://localhost:5000').then(function(res){
    var data = res.data;
    console.log(data);
    console.log(typeof(data));
    console.log(data[0]); 
})

屏幕上的结果:

[ '{"id": 0, "name": "proudct1"}',
  '{"id": 1, "name": "product2"}',
  '{"id": 2, "name": "product3"}' ]
object
{"id": 0, "name": "proudct1"}