2013-10-11 54 views
0

我使用CherrPy,我必须使AJAX连接检索有关表的信息。 的Python代码是:反序列化JavaScript中的字典的JSON列表

@cherrypy.expose 
def projects(self): 
    c = self.dbConnect() 
    projects_list = list() 
    projects_version_list = list() 

    # Get every products 
    c.execute('Select * from T_Projects') 
    result = c.fetchall() 
    for row in result: 

     # Conversion ID to string 
     id = self.b10to26(int(str(row).split(",")[0][1:])) 
     if len(id)==1: 
      id = "AA" + id 
     elif len(id)==2: 
      id = "A" + id 

     # Parse db informations 
     name = str(row).split("'")[1] 
     created = str(row).split(",")[2].split("'")[1] 

     # Product in dict line 
     dict = {"name" : name, "id" : id, "created" : created} 

     # Get every product versions 
     cmd = ('Select * from T_Projects_Versions where id_project="{}"').format(str(row).split(",")[0][1:]) 
     c.execute(cmd) 
     versions = c.fetchall() 
     for row_version in versions: 

      # Get ID + Name 
      id_version = self.b10to26(int(str(row_version).split(",")[1])) 
      if len(id_version)==1: 
       id_version = "A" + id_version 
      name = str(row_version).split("'")[1] 
      created = str(row_version).split(",")[4].split("'")[1] 

      # Product version dict line 
      dict_version = {"name" : name, "id" : id_version, "created" : created} 

      #Put in a list 
      projects_version_list.append (dict_version) 
     projects_list.append({"dict" : dict, "projects_version_list" : projects_version_list}) 

    cherrypy.response.headers["Content-Type"] = "application/json" 
    return json.dumps(projects_list) 

的JavaScript/jQuery代码是在这里:

for(var i = 0;i < data.length; ++i) //for enumerating array 
       { 
        var obj = data[i]; 
        for(var propName in obj) //for enumerating the properties of an object 
        { 
         var value = obj[propName]; 
         $('#container').append("item : " + i + " : prop : " + propName + " : value : " + value); 
        } 
       } 

并且输出是:

项:0:丙:字典:值:[对象对象]项目0:prop:projects_version_list:值:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object对象],[对象对象],[对象对象],[对象对象],[对象对象]项目对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象]对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象]对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象],[对象对象]对象],[对象对象] ...

javascript部分不起作用。你有什么建议吗 ?

谢谢!

Servietsky

+1

你能更具体的不是 '不工作'?为什么它不起作用?任何错误?奇怪的行为? –

+0

什么是错误? – Andy

+0

没有错误,页面上没有显示任何内容。我使用输出内容的代码进行更新^^' – Servietsky

回答

0

我前几天解决了这个问题,也许它会对某人感兴趣。

这里是JS:

$.get("/products", function(data) { 
     for(var i = 0;i < data.length; ++i) 
     { 
      $('.products_body').append("<tr class='header'><td id='name' class='product'>" + data[i]["product"]['name'] + "</td><td class='product'> " + data[i]["product"]['id'] + "</td><td class='product'>" + data[i]["product"]['created'] + "</td></tr>"); 
      for(var j = 0;j < data[i]["versions"].length; ++j) 
      { 
       var value = data[i]["versions"][j]; 
       $('.products_body').append("<tr class='versions'><td class='version'>" + value['name'] + " </td><td class='version'> " + value['id'] + "</td><td class='version'>" + value['created'] + "</td></tr>"); 
      } 
     } 
    }) 

这里是Python:

@cherrypy.expose 
def products(self): 
    c = self.dbConnect() 
    products = list() 

    # Get every products 
    c.execute('Select * from T_products') 
    result = c.fetchall() 
    for row in result: 
     versions = list() 
     # Conversion ID to string 
     id = self.b10to26(int(str(row).split(",")[0][1:])) 
     if len(id)==1: 
      id = "AA" + id 
     elif len(id)==2: 
      id = "A" + id 

     # Parse db informations 
     name = str(row).split("'")[1] 
     created = str(row).split(",")[2].split("'")[1] 

     # Product in dict line 
     product = {"name" : name, "id" : id, "created" : created} 

     # Get every product versions 
     cmd = ('Select * from T_products_Versions where id_product="{}"').format(str(row).split(",")[0][1:]) 
     c.execute(cmd) 
     cmd_versions = c.fetchall() 
     for row_version in cmd_versions: 

      # Get ID + Name 
      id_version = self.b10to26(int(str(row_version).split(",")[1])) 
      if len(id_version)==1: 
       id_version = "A" + id_version 
      name = str(row_version).split("'")[1] 
      created = str(row_version).split(",")[4].split("'")[1] 

      # Product version dict line 
      version = {"name" : name, "id" : id_version, "created" : created} 

      #Put in a list 
      versions.append (version) 
     products.append({"product" : product, "versions" : versions}) 

    cherrypy.response.headers["Content-Type"] = "application/json" 
    return json.dumps(products)