如何通过ajax重新加载表数据。 当第一个加载视图时,我通过ajax获取表数据。 当我更改某些条件以重新排序数据时,它无法重新加载数据。 第一个数据仍然存在,并添加下一个数据。
查看
<table class="oa-content-table">
<tr>
<td>
<div class="total">Index</div>
<div class="title">Name</div>
</td>
</tr>
</table>
脚本
<script type="text/javascript">
getData()
function getData(){
$.ajax({
url: '@Url.Action("JsonGetBillFactoryCost", "Bill")',
data: {
QueryType: $('#divQueryType_BFC').data('kendoDropDownList').value(),
SDay: $('#divSDay_BFC').val(),
EDay: $('#divEDay_BFC').val()
},
type: 'GET',
dataType: 'JSON',
success: function (data) {
$(data).each(function () {
var element = document.createElement('tr');
$(element).data('dataItem', this);
var html = '<td>' +
'<div class="content">' + this.Index+ '</div>' +
'<div class="total">' + this.Name + '</div>' +
'</td>';
$(element).html(html);
$('.oa-content-table tr').append(html);
});
}
});
}
我改变QueryType,SDay,EDay条件后重新排序数据,我调用函数getData()。我只想重新加载'下一个数据',我不再需要第一个数据了。
答案 0 :(得分:1)
您没有删除之前的tr's
因此,每次只是将其附加到现有表格时。您需要在添加新响应之前清除表内容。此外,因为你维护第一个tr作为表中的表头(不知道你为什么要这样。你可以使用thead
为此目的)我们需要保留它,即:第一个tr。因此,在$(data).each
循环
$(".oa-content-table tr:gt(0)").remove();
同样在您的成功函数中,您只需将创建的td's
附加到现有tr
但实际上应该构建新的tr's
并将其附加到表中。让我指出来。因此,您成功的最终代码应如下所示。
success: function (data) {
$(".oa-content-table tr:gt(0)").remove(); //remove all the tr's except first ,As you are using it as table headers.
$(data).each(function () {
return function(){ //to overcome the loop issue.
var element = document.createElement('tr');
$(element).data('dataItem', this);
var html = '<td>' +
'<div class="content">' + this.Index+ '</div>' +
'<div class="total">' + this.Name + '</div>' +
'</td>';
$(element).html(html);
$('.oa-content-table tr').append($(element)); //append your new tr
}
});
}
如果有帮助,请告诉我。
更新1:根据您的评论,数据重复多条记录,这是jquery中的Infamous loop issue
。最后一个循环值将分配给所有其他循环数据,因为数据是通过引用传递的。为了清楚了解此循环问题,我建议您先看一下 The Infamous Loop Problem ,然后导航到他解释循环问题的部分。
答案 1 :(得分:0)
我希望这可能有用!
function getData(){
$.ajax({
url: '@Url.Action("JsonGetBillFactoryCost", "Bill")',
data: {
QueryType: $('#divQueryType_BFC').data('kendoDropDownList').value(),
SDay: $('#divSDay_BFC').val(),
EDay: $('#divEDay_BFC').val()
},
type: 'GET',
dataType: 'JSON',
success: function (data) {
$(data).each(function () {
var element = document.createElement('tr');
$(element).data('dataItem', this);
var html = '<td>' +
'<div class="content">' + this.Index+ '</div>' +
'<div class="total">' + this.Name + '</div>' +
'</td>';
$(element).html(html);
$('.oa-content-table').empty();
$('.oa-content-table tr').append(html);
});
}
});
}
答案 2 :(得分:0)
在循环之前,您可以执行以下操作:
$('.oa-content-table').html("");