2012-06-13 11 views
13

ile yüklendiğini belirleme jQuery datatables'un en son sürümünü kullanıyorum. Veri yüklendikten ve görüntülendikten hemen sonra kullanabileceğim bir geri çağırma işlevi var mı?jQuery veritabanın ne zaman oluşturulduğunu ve

IE8'da denediğim bir veritabam var. Test ettiğim 2 set veri var (bunlardan sadece bir tanesini kullanıyorum). Bir Ajax çağrısından aldığım bir JavaScript dizisi ve bir veri kümem var. ASP.NET MVC 3 kullanıyorum. Ajax çağrısından verilerini alır

Yapılandırma:

benim Datatable (Verisiz) Datatable oluşturulur bu şekilde yüklenen
$('#banks-datatable').dataTable({ 
    "bProcessing": true, 
    "sAjaxSource": '/Administration/Bank/List', 
    "aoColumns": [ 
      { "sTitle": "Engine" }, 
      { "sTitle": "Browser" }, 
      { "sTitle": "Platform" }, 
      { "sTitle": "Version" }, 
      { "sTitle": "Grade" } 
    ], 
    "bAutoWidth": false, 
    "bFilter": false, 
    "bLengthChange": false, 
    "iDisplayLength": 10 
}); 

alert('test'); 

ve işleme kutusu görüntülenir ve uyarı pop-up görüntülenir. Bu noktada, veri tabanı var ancak veri tabanına hiç veri yüklenmedi. Sadece pop-up gittiğinde (pop-up üzerindeki OK butonuna bastığımda), veriler datatata yüklenir. Bu neden? bir JavaScript diziden verilerini alır

Yapılandırma:

var aDataSet = [ 
    ['Trident', 'Internet Explorer 4.0', 'Win 95+', '4', 'X'], 
    ['Trident', 'Internet Explorer 5.0', 'Win 95+', '5', 'C'], 
    ['Trident', 'Internet Explorer 5.5', 'Win 95+', '5.5', 'A'], 
    ['Trident', 'Internet Explorer 6', 'Win 98+', '6', 'A'], 
    ['Trident', 'Internet Explorer 7', 'Win XP SP2+', '7', 'A'], 
    ['Trident', 'AOL browser (AOL desktop)', 'Win XP', '6', 'A'], 
    ['Gecko', 'Firefox 1.0', 'Win 98+/OSX.2+', '1.7', 'A'] 
]; 

$('#banks-datatable').dataTable({ 
    "aoColumns": [ 
      { "sTitle": "Engine" }, 
      { "sTitle": "Browser" }, 
      { "sTitle": "Platform" }, 
      { "sTitle": "Version" }, 
      { "sTitle": "Grade" } 
    ], 
    "bAutoWidth": false, 
    "bFilter": false, 
    "bLengthChange": false, 
    "iDisplayLength": 10, 
    "aaData": aDataSet 
}); 

alert('test'); 

Datatable oluşturulur ve veri yüklenir ve sonra yalnızca açılan ekran yapar. Bu ilk senaryodan farklıdır. Bu neden böyle?

İlk senaryo ile gidersem, veri kümesinin ne zaman oluşturulduğunu ve veri ile yüklendiğini belirleyebileceğim bir yol var mı?

Bu kontrol ile genel olmasını isterim, böylelikle hiç bir zaman veriyle yüklemeye karar vermemde kullanılabilir.

+0

Eğer '.ajaxSucess' denediniz mi? – undefined

+0

Henüz değil, ama Ajax çağrısından veya sadece düz bir JavaScript dizisinden veri alırsa bağımsız olarak kullanabileceğim daha genel bir tane var mı? –

+0

evet, haklısınız, verileri bir diziden alır, ['promise()'] (http://api.jquery.com/promise/) ve 'done()' yöntemlerini deneyebilirsiniz. – undefined

cevap

11

fnDrawCallback işlevini kullanabilirsiniz. Tablo çizildiğinde her zaman çağrılır. Tablo, verilerle yüklendiğinde, sıralandığında veya filtrelenirken buna dahildir.

+1

Bu benim için çalıştı. Bir JavaScript dizisinden veya Ajax çağrısından gelen verileri kullanırsam, bu işlevi çağırmaz. Teşekkürler. –

+0

Ancak, yalnızca "yük" olayını istiyorsanız ek değişken gereklidir. –

2

Tek tek iş parçacığı olmak için javascript'i her zaman biliyordum. İşte bunu destekleyecek bir post şudur: sunucudan veri almak ve sonra bir uyarı kutusu ile ipliği tutan ilk senaryoda

Is JavaScript guaranteed to be single-threaded?

. İkinci senaryoda verileri önceden doldurursunuz. Bunun fark olduğuna inanıyorum.

http://datatables.net/usage/callbacks#fnServerData

// POST data to server 
$(document).ready(function() { 
    $('#example').dataTable({ 
    "bProcessing": true, 
    "bServerSide": true, 
    "sAjaxSource": "xhr.php", 
    "fnServerData": function (sSource, aoData, fnCallback) { 
     $.ajax({ 
     "dataType": 'json', 
     "type": "POST", 
     "url": sSource, 
     "data": aoData, 
     "success": fnCallback 
     }); 
    } 
    }); 
}); 
20

Daha iyi kullanmak fnInitComplete:

$(document).ready(function() { 
    $('#example').dataTable({ 
     "fnInitComplete": function (oSettings, json) { 
      alert('DataTables has finished its initialisation.'); 
     } 
    }); 
}) 
+0

Teşekkürler, sadece AJAX verileri alındığında ve GUI güncellendiğinde yakalamak için ihtiyacım olan şey. – 1DMF

+0

DataTables 1.10'un yeni bir sürümü hafif değiştirilmiş bir API ile piyasaya sürüldü. Geri arama listesi: http://datatables.net/reference/option/ – Xdg

+0

1.10 kullanıyorum ve yukarıda gayet iyi çalışıyor. – 1DMF

0

Ayrıca "başarı" için REMPLACEMENT olarak DATASRC kullanabilirsiniz

Bu sayfa başarısı üzerinde geri arama çağırmak nasıl gösterir aşırı yüklenmemesi gerektiği için:

Verilerin örnek niteliğiyle burada.DataTable JQuery yeni sürümü üzerinde

var table = $('#example').DataTable({ 
    "ajax": { 
      "type" : "GET", 
      "url" : "ajax.php", 
      "dataSrc": function (json) { 
       //Make your callback here. 
       alert("Done!"); 
       return json.data; 
       }  
      }, 
    "columns": [ 
      { "data": "name" }, 
      { "data": "position" }, 
      { "data": "office" }, 
      { "data": "extn" }, 
      { "data": "start_date" }, 
      { "data": "salary" } 

     ] 
    }); 
6

net yöntemi denir: initcomplete

https://datatables.net/reference/option/initComplete

+0

Mükemmel! Tüm veriler alınmadan önce (sunucu tarafındaki ajax'tan) kod tetiklendiğinden, belirli veri kümelerini tutan sekmelere eklenen rozetleri doldurmak ve sıfır sayımını sürdürmek için bir işlevi kapatmaya çalışıyordum. Bu çağrı, tüm veriler geri gelene kadar işlev çağrısını erteledi. – ScottLenart

İlgili konular