0
我有一個包含了年,月,國家和城市組合框數據過濾器。所有組合框的項目有一個選擇所有(所有年份,所有月份,所有國家和所有城市)。處理大量數據的jQuery
當我選擇一個過濾器,我將數據發送到服務器和我得到的數據JSON對象,這是由JQuery的處理。
的問題就來了,如果你選擇的所有數據 - 服務器將返回一個JSON對象有三萬記錄(及以上)和瀏覽器,包括動畫演出(裝載機),凍結和一切花費的時間太長。
這是數據過濾器的HTML(有些選擇是通過AJAX填寫)
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title" data-label="Filter data"></h3>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-3" data-label="Year"></div>
<div class="col-md-3" data-label="Month"></div>
<div class="col-md-3" data-label="Country"></div>
<div class="col-md-3" data-label="City"></div>
</div>
<div class="row">
<div class="col-md-3">
<select id="cmbYear">
<option value="0" data-label="All years"></option>
</select>
</div>
<div class="col-md-3">
<select id="cmbMonth">
<option value="0" data-label="All year"></option>
<option value="1" data-label="January"></option>
<option value="2" data-label="February"></option>
<option value="3" data-label="March"></option>
<option value="4" data-label="April"></option>
<option value="5" data-label="May"></option>
<option value="6" data-label="June"></option>
<option value="7" data-label="July"></option>
<option value="8" data-label="August"></option>
<option value="9" data-label="September"></option>
<option value="10" data-label="October"></option>
<option value="11" data-label="November"></option>
<option value="12" data-label="December"></option>
</select>
</div>
<div class="col-md-3">
<select id="cmbCountry">
<option value="0" data-label="All countries"></option>
</select>
</div>
<div class="col-md-3">
<select id="cmbCity">
<option value="0" data-label="All cities"></option>
</select>
</div>
</div>
<br/>
<div class="row">
<div class="col-md-12">
<button id="btnFilterData" data-label="Filter data" class="btn btn-primary btn-lg pull-right"></button>
</div>
</div>
</div>
這是一個jQuery腳本:
$(document).ready(function() {
$('#btnFilterData').click(function() {
GetFilteredData();
});
});
function GetFilteredData() {
$.ajax({
url: 'some-file.php',
data: {
year: $('#cmbYear').val(),
month: $('#cmbMonth').val(),
countryid: $('#cmbCountry').val(),
cityid: $('#cmbCity').val()
},
type: 'post',
async: true,
success: function (data) {
if (data.IsError) {
ShowErrorDialog(data.Error);
}
else {
$('#tableRawData').find('tr:gt(0)').remove();
if (data.Data != null) {
for (var i = 0; i < Object.keys(data.Data).length; i++) {
var obj = data.Data[i];
var newRow = '<tr><td>' + obj.Date+ '</td><td>' + obj.Country + '</td><td>' + obj.City + '</td><td>' + obj.Loan+ '</td><td>' + obj.Paid+ '</td><td>' + obj.Remains+ '</td><td data-label="' + obj.Note + '"></td></tr>';
$('#tableRawData').append(newRow);
}
}
}
},
complete: function() {
HideWaitDialog();
}
});
什麼辦法如何使處理更快還是更有效?在理想的情況下,不凍結瀏覽器和動畫加載器...
也許在結果中添加分頁,以便一次只顯示幾個分頁?我懷疑任何用戶將需要*同時*看到30,000條記錄。 – David
足夠容易設置某種限制,並且如果存在比限制返回消息更多的結果,告訴用戶縮小過濾器 – charlietfl
實際上不需要顯示所有記錄。這只是外部的限制:-)但我的客戶希望有可能顯示所有數據(我的意思是這是不正確的解決方案,但他想要它) – Davecz