如何通过 ajax 重新加载表数据
How to reload table data by ajax
如何通过 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);
});
}
});
}
在我更改了用于重新排序数据的查询类型,SDay,EDay条件后,我调用函数getData()。我只想重新加载"下一个数据",我不再需要第一个数据了。
您不会删除以前的tr's
因此,每次您只是将其附加到现有表中。在追加新响应之前,您需要清除表内容。另外,因为您正在维护第一个tr以充当表中的表标题(不确定为什么要这样做。您可以使用thead
为此)我们需要保留它,即:第一个tr。因此,在 $(data).each
循环之前将此代码放在 ajax 成功函数中
$(".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
。最后一个循环值将分配给所有其他循环数据,因为数据是通过引用传递的。为了清楚地了解这个循环问题是什么,我建议您查看这个臭名昭著的循环问题,导航到他解释循环问题的部分。
我希望
这可能有效!
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);
});
}
});
}
在循环之前,您可以执行以下操作:
$('.oa-content-table').html("");
相关文章:
- 正在等待呈现图表,直到加载数据为止
- ng绑定和ng href问题.ng href未从控制器加载数据
- 单击按钮时加载数据
- 在reactjs组件中预加载数据
- Highcharts可以从服务器加载数据,但不能更新
- AngularJS promise在加载数据之前得到解决
- 在Knockout JS中搜索从DB加载数据的项目
- 如何在angular js中使用$emit后重新加载数据
- 构建多个图表时,HighCharts加载数据的速度较慢
- 加载初始网站后在后台加载数据
- ExtJS网格未从Ext.data.XmlStore加载数据
- 数据表 AJAX 筛选器重新加载数据
- select2 使用 AJAX 加载数据不能选择任何选项
- 在 Metro 风格应用中启动时加载数据
- 需要帮助使用 AJAX 和其他一些东西加载数据
- Vue 不加载数据
- 向右滚动加载数据
- 为SEO的数据绑定JS预加载数据
- mysql循环-预加载数据
- 无法使用JSON加载数据表