2013-10-11 3 views
0

Я использую CherrPy, и мне нужно сделать соединение AJAX для получения информации о таблице. код питон:Deserialize JSON список словарей в javascript

@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: проп: ДИКТ: значение: [ объект Object]: 0: prop: projects_version_list: значение: [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], [Object Object], [Object Object], [Object Object], [объект Ob ject], [object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [Object Object], [object Object] ...

Javascript часть просто не работает. Есть ли у вас какие-либо предложения ?

Спасибо!

Servietsky

+1

Можете ли вы быть более конкретным, чем 'не работает'? Почему это не работает? Любые ошибки? Нечетное поведение? –

+0

Какая ошибка? – Andy

+0

Ошибка, и ничего не отображается на странице. Я обновил код, выводящий что-то ^^ ' – Servietsky

ответ

0

Я решил проблему несколько дней назад, может быть, это будет интересно кому-то.

Вот это ЯШ:

$.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>"); 
      } 
     } 
    }) 

И вот питон:

@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) 
Смежные вопросы