2015-09-14 14 views
4

Я получаю данные таблицы из базы данных через запрос AJAX. И мне нужно изменить параметр данных в запросе AJAX и обновить таблицу.Обновить запрос Ajax с новыми параметрами

Я освежающая таблицу с помощью команды

$('#table1').DataTable().ajax.reload(); 

У меня есть следующий код

$('#table1').DataTable({ 

    /* SERVER SIDE PROCESSING */ 
       "serverSide": true, 
       "ajax": 
        { 
         "url": "Home/Search", 
         "type": "POST", 

         "data": { 
          'searchType': GetSearchType(), 
          'searchText': GetSearchText() 
          //'searchType': $.mynamespace.searchType 
          //'searchText': $.mynamespace.searchText 
          //'searchType': localStorage.getItem("searchType"), 
          //'searchText': localStorage.getItem("searchText"), 
         } 
        } 
      }); 

Но после того, как AJAX перезаряжания, оригинальный запрос на сервер отправляются и новые значения параметров игнорируются. Я попытался передать данные в запрос через функцию, глобальную переменную и хранилище браузера, но ни один из подходов не работает. В Интернете я нахожу решение с

aoData.push() 

функция, но я не знаю, как ее использовать.

Моя версия jQuery DataTables - 1.10.7.

Я также попытался разрушать и воссоздавать таблицу с этим кодом:

$('#table1').DataTable({ 
     "ajax": 
      { 
       "url": "Home/Search", 
       "type": "POST", 

       "data": { 
        'searchType': GetSearchType(), 
        'searchText': GetSearchText() 
       } 
      }, 
     "destroy" : true 
    }).ajax.reload(); 

, но я получаю сообщение об ошибке:

DataTables предупреждение: таблица ID = table1 - Ajax ошибка (http://www.datatables.net/manual/tech-notes/7)

Словарь параметров содержит нулевую запись для параметра 'draw' типа, не допускающего nullable 'System.Int32'

ответ

10

Вы можете использовать функцию в качестве значения для опции ajax.data, как показано ниже.

Таким образом, ваш код будет запускаться каждый раз, когда клиент делает запрос на сервер, а не один раз, как с вашим исходным кодом.

$('#table1').DataTable({ 
    "serverSide": true, 
    "ajax": { 
     "url": "Home/Search", 
     "type": "POST", 
     "data": function(d){ 
     d.searchType = GetSearchType(); 
     d.searchText = GetSearchText(); 
     } 
    } 
}); 

Затем используйте $('#table1').DataTable().ajax.reload(), когда вам нужно перезагрузить таблицу или $('#table1').DataTable().ajax.reload(null, false), если вы не хотите сбросить текущую страницу. См. ajax.reload() для получения дополнительной информации.

+1

Спасибо за помощь приятель –

+0

@ Gyrocode.com Работает как очарование. –

2

Хорошо, я нашел решение, при повторной инициализации таблицы необходимо указать все настройки еще раз, иначе они будут взяты из значения по умолчанию. поэтому окончательный код

$('#table1').DataTable({ 
      "iDisplayStart": 0, 
      "iDisplayLength": 50, 
      "bPaginate": true, 
      "bSort": false, 
      "serverSide": true, 
      /* and all others settings others than default */ 
     "ajax": 
      { 
       "url": "Home/Search", 
       "type": "POST", 

       "data": { 
        'searchType': GetSearchType(), 
        'searchText': GetSearchText() 
       } 
      }, 
     "destroy" : true /* <---- this setting reinitialize the table */ 
    }). 

, но если кто-то найдет лучшее решение, поделитесь им.

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