2015-07-20 8 views
0

Я использую YUI's Datatable Column Formatter для форматирования некоторых данных, возвращаемых с помощью запроса AJAX. Вот конфиг:Запрос AJAX возвращает удвоенный список объектов - YUI

var dataTable = new Y.DataTable(
{ 
    id: 'my-table', 
    height: '500px', 
    width: '500px' 
}); 
var columns = [{ 
     key: 'id', 
     label: 'ID' 
    }, { 
     label: 'Name', 
     formatter: function (o) { 
      console.log(o.data); 
      return o.data.name; 
     } 
    }, 
    { 
     key: 'department', 
     label: 'Department' 
    } 
]; 

function search(){ 
    dataSource = new Y.DataSource.IO({source: '/search' }); 
    dataSource.sendRequest({ 
     dataType: 'json', 
     on: { 
      success: function(e) { 
       response = e.data.responseText;    
       data = Y.JSON.parse(response); 
       dataTable.set('columns', columns); 
       dataTable.set('data', data.content); 
      }, 
      failure: function(e) { 
       //do stuff 
      } 
     }); 
    } 

Моя таблица получает заселена штраф

enter image description here

И это возвращается из консоли

Object {id: 1, name: "Bob", department: 001} 
Object {id: 2, name: "Andy", department: 003} 

Однако, если я запускаю запрос А во второй раз, количество объектов, возвращенных в два раза

Object {id: 1, name: "Bob", department: 001} 
Object {id: 2, name: "Andy", department: 003} 
Object {id: 1, name: "Bob", department: 001} 
Object {id: 2, name: "Andy", department: 003} 

Пока данные все еще отображаются, это дублирование нарушает функциональность в другом месте. Кроме того, независимо от того, сколько раз запрос запускается, возвращается только удвоенный список. Любая идея, почему объекты объединяются?

+0

Попробуйте удалить существующие данные по каждому запросу AJAX. '$ ('# myTableID'). remove()' и затем воссоздать. Кажется, ваш вызов AJAX добавляет к существующему контенту – ctwheels

+0

@ctwheels, который действительно был правильным ответом. Если вы опубликуете его, я соглашусь –

+1

Обратите внимание, что мне пришлось переместить декларацию 'dataTable' внутри функции' search', чтобы заставить ее работать –

ответ

1

Попробуйте удалить существующие данные по каждому запросу AJAX. $('#myTableID').remove(), а затем воссоздать. Кажется, ваш вызов AJAX добавляется к существующему контенту

 Смежные вопросы

  • Нет связанных вопросов^_^