Javascript 光滑的网格不使用Ajax调用刷新
我有一个用页面加载的sclick网格。现在,我希望单击复选框(我使用ajax调用获取新数据)就可以用新数据替换slick网格上的数据,并且复选框应该保留其值。我可以看到,尽管服务器提供了新数据,但光滑的网格不会刷新,复选框也不会保留页面加载的状态(即选中) Jsp:Javascript 光滑的网格不使用Ajax调用刷新,javascript,java,jquery,ajax,jsp,Javascript,Java,Jquery,Ajax,Jsp,我有一个用页面加载的sclick网格。现在,我希望单击复选框(我使用ajax调用获取新数据)就可以用新数据替换slick网格上的数据,并且复选框应该保留其值。我可以看到,尽管服务器提供了新数据,但光滑的网格不会刷新,复选框也不会保留页面加载的状态(即选中) Jsp: <c:if test="${info == null or empty info}"> <div id="result" class="ui-widget" style="
<c:if test="${info == null or empty info}">
<div id="result" class="ui-widget" style="float:center">
<strong>No results found !</strong>
</div>
</c:if>
var dataView;
var grid;
var data = [];
var options = {
enableCellNavigation: true,
showHeaderRow: true,
headerRowHeight: 40,
explicitInitialization: true,
enableColumnReorder: false,
multiColumnSort: true,
defaultSortAsc:false,
};
var columns = [];
var columnFilters = {};
{
....
...
}
$(function () {
var holder=new Array();
var i=0;
var d = (data[i] = {});
<c:forEach var="message" items="${info}" >
holder[i]={
id: i,
remove: '<c:out value="${message.id}"/>' ,
name: '<c:out value="${message.name}"/>',
status: '<c:out value="${message.status}"/>'
}
i++;
</c:forEach>
dataView = new Slick.Data.DataView();
grid = new Slick.Grid("#rulesGrid", dataView, columns, options);
var pager = new Slick.Controls.Pager(dataView, grid, $("#rulesPager"));
grid.onSort.subscribe(function (e, args){
dataView.fastSort(args.sortCol.field, args.sortAsc);
grid.render();
});
dataView.onRowCountChanged.subscribe(function (e, args) {
grid.updateRowCount();
grid.invalidateRows(args.rows);//new change
grid.render();
});
grid.init();
dataView.beginUpdate();
dataView.setItems(holder);
dataView.setFilter(filter);
dataView.endUpdate();
dataView.refresh();
grid.invalidate();
grid.updateRowCount();
grid.render();
});
function PopulateGrids(){
var showInactive,showSubmitted;
if($("#showInactive").is(':checked')){
showInactive=true;
}
else if($("#showSubmitted").is(':checked')){
showSubmitted=true;
}
else if($("#showSubmitted").is(':checked') && $("#showInactive").is(':checked'))
{
showInactive=true;
showSubmitted=true;
}
jQuery.ajax( {
async : false,
cache : false,
url : "/application/createNewResult/details?showInactive="+encodeURI(showInactive)+"&showSubmitted="+encodeURI(showSubmitted) ,
type : 'GET',
contentType: "application/json; charset=utf-8",
dataType : 'json',
success : function() {
alert("showInactive: "+showInactive+" show submitted: "+showSubmitted);
console.log("info:",'<c:out value="${info}"/>');
if(showInactive)
$("#showInactive").prop('checked', true);
else if(showSubmitted )
$("#showSubmitted").prop('checked', true);
},
complete : function(request, status) {
if (status == undefined || status == "error" || status == "parsererror") {
alert('error in searching Invalid or submitted records: '+status);
window.location.href="/application/createNewResult/";
} else if (status != 'success'){
alert('error in searching Invalid or submitted records: '+status);
}
}
});
}
未找到任何结果强>
光滑网格:
<c:if test="${info == null or empty info}">
<div id="result" class="ui-widget" style="float:center">
<strong>No results found !</strong>
</div>
</c:if>
var dataView;
var grid;
var data = [];
var options = {
enableCellNavigation: true,
showHeaderRow: true,
headerRowHeight: 40,
explicitInitialization: true,
enableColumnReorder: false,
multiColumnSort: true,
defaultSortAsc:false,
};
var columns = [];
var columnFilters = {};
{
....
...
}
$(function () {
var holder=new Array();
var i=0;
var d = (data[i] = {});
<c:forEach var="message" items="${info}" >
holder[i]={
id: i,
remove: '<c:out value="${message.id}"/>' ,
name: '<c:out value="${message.name}"/>',
status: '<c:out value="${message.status}"/>'
}
i++;
</c:forEach>
dataView = new Slick.Data.DataView();
grid = new Slick.Grid("#rulesGrid", dataView, columns, options);
var pager = new Slick.Controls.Pager(dataView, grid, $("#rulesPager"));
grid.onSort.subscribe(function (e, args){
dataView.fastSort(args.sortCol.field, args.sortAsc);
grid.render();
});
dataView.onRowCountChanged.subscribe(function (e, args) {
grid.updateRowCount();
grid.invalidateRows(args.rows);//new change
grid.render();
});
grid.init();
dataView.beginUpdate();
dataView.setItems(holder);
dataView.setFilter(filter);
dataView.endUpdate();
dataView.refresh();
grid.invalidate();
grid.updateRowCount();
grid.render();
});
function PopulateGrids(){
var showInactive,showSubmitted;
if($("#showInactive").is(':checked')){
showInactive=true;
}
else if($("#showSubmitted").is(':checked')){
showSubmitted=true;
}
else if($("#showSubmitted").is(':checked') && $("#showInactive").is(':checked'))
{
showInactive=true;
showSubmitted=true;
}
jQuery.ajax( {
async : false,
cache : false,
url : "/application/createNewResult/details?showInactive="+encodeURI(showInactive)+"&showSubmitted="+encodeURI(showSubmitted) ,
type : 'GET',
contentType: "application/json; charset=utf-8",
dataType : 'json',
success : function() {
alert("showInactive: "+showInactive+" show submitted: "+showSubmitted);
console.log("info:",'<c:out value="${info}"/>');
if(showInactive)
$("#showInactive").prop('checked', true);
else if(showSubmitted )
$("#showSubmitted").prop('checked', true);
},
complete : function(request, status) {
if (status == undefined || status == "error" || status == "parsererror") {
alert('error in searching Invalid or submitted records: '+status);
window.location.href="/application/createNewResult/";
} else if (status != 'success'){
alert('error in searching Invalid or submitted records: '+status);
}
}
});
}
var数据视图;
var网格;
var数据=[];
变量选项={
enableCellNavigation:true,
是的,
头灯:40,
明确化:正确,
enableColumnReorder:false,
多列排序:正确,
defaultSortAsc:false,
};
var列=[];
var columnFilters={};
{
....
...
}
$(函数(){
var holder=新数组();
var i=0;
变量d=(数据[i]={});
持有人[i]={
id:我,
删除:“”,
名称:“”,
状态:“”
}
i++;
dataView=new Slick.Data.dataView();
grid=new Slick.grid(#rulesGrid),dataView,columns,options);
var pager=new Slick.Controls.pager(dataView,grid,$(“#rulesPager”);
grid.onSort.subscribe(函数(e,args){
fastSort(args.sortCol.field,args.sortAsc);
grid.render();
});
dataView.onRowCountChanged.subscribe(函数(e,args){
grid.updateRowCount();
grid.invalidateRows(args.rows);//新更改
grid.render();
});
grid.init();
dataView.beginUpdate();
dataView.setItems(持有者);
setFilter(filter);
endUpdate();
refresh();
grid.invalidate();
grid.updateRowCount();
grid.render();
});
Ajax调用:
<c:if test="${info == null or empty info}">
<div id="result" class="ui-widget" style="float:center">
<strong>No results found !</strong>
</div>
</c:if>
var dataView;
var grid;
var data = [];
var options = {
enableCellNavigation: true,
showHeaderRow: true,
headerRowHeight: 40,
explicitInitialization: true,
enableColumnReorder: false,
multiColumnSort: true,
defaultSortAsc:false,
};
var columns = [];
var columnFilters = {};
{
....
...
}
$(function () {
var holder=new Array();
var i=0;
var d = (data[i] = {});
<c:forEach var="message" items="${info}" >
holder[i]={
id: i,
remove: '<c:out value="${message.id}"/>' ,
name: '<c:out value="${message.name}"/>',
status: '<c:out value="${message.status}"/>'
}
i++;
</c:forEach>
dataView = new Slick.Data.DataView();
grid = new Slick.Grid("#rulesGrid", dataView, columns, options);
var pager = new Slick.Controls.Pager(dataView, grid, $("#rulesPager"));
grid.onSort.subscribe(function (e, args){
dataView.fastSort(args.sortCol.field, args.sortAsc);
grid.render();
});
dataView.onRowCountChanged.subscribe(function (e, args) {
grid.updateRowCount();
grid.invalidateRows(args.rows);//new change
grid.render();
});
grid.init();
dataView.beginUpdate();
dataView.setItems(holder);
dataView.setFilter(filter);
dataView.endUpdate();
dataView.refresh();
grid.invalidate();
grid.updateRowCount();
grid.render();
});
function PopulateGrids(){
var showInactive,showSubmitted;
if($("#showInactive").is(':checked')){
showInactive=true;
}
else if($("#showSubmitted").is(':checked')){
showSubmitted=true;
}
else if($("#showSubmitted").is(':checked') && $("#showInactive").is(':checked'))
{
showInactive=true;
showSubmitted=true;
}
jQuery.ajax( {
async : false,
cache : false,
url : "/application/createNewResult/details?showInactive="+encodeURI(showInactive)+"&showSubmitted="+encodeURI(showSubmitted) ,
type : 'GET',
contentType: "application/json; charset=utf-8",
dataType : 'json',
success : function() {
alert("showInactive: "+showInactive+" show submitted: "+showSubmitted);
console.log("info:",'<c:out value="${info}"/>');
if(showInactive)
$("#showInactive").prop('checked', true);
else if(showSubmitted )
$("#showSubmitted").prop('checked', true);
},
complete : function(request, status) {
if (status == undefined || status == "error" || status == "parsererror") {
alert('error in searching Invalid or submitted records: '+status);
window.location.href="/application/createNewResult/";
} else if (status != 'success'){
alert('error in searching Invalid or submitted records: '+status);
}
}
});
}
函数PopulateGrids(){
var showInactive,showSubmitted;
如果($(“#showInactive”)。是(':选中的')){
showInactive=true;
}
如果($(“#showSubmitted”)。为(“:选中”),则为else{
showSubmitted=true;
}
如果($(“#showSubmitted”).is(':checked')&&($(“#showInactive”).is(':checked'))
{
showInactive=true;
showSubmitted=true;
}
jQuery.ajax({
async:false,
cache:false,
url:“/application/createNewResult/details?showInactive=“+encodeURI(showInactive)+”&showSubmitted=“+encodeURI(showSubmitted),
键入:“GET”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:函数(){
警报(“showInactive:+showInactive+”显示已提交:+showSubmitted”);
控制台日志(“信息:”,“”);
如果(显示不活动)
$(“#showInactive”).prop('checked',true);
否则,如果(已提交)
$(“#showSubmitted”).prop('checked',true);
},
完成:功能(请求、状态){
如果(状态==未定义| |状态==“错误”| |状态==“解析器错误”){
警报('搜索无效或提交的记录时出错:'+状态);
window.location.href=“/application/createNewResult/”;
}否则如果(状态!=“成功”){
警报('搜索无效或提交的记录时出错:'+状态);
}
}
});
}
在ajax调用中,成功回调函数可以包含一个“result”参数,如:
success: function(result) {...
在服务器上,您将定义哪些数据应该返回到“result”参数中(网格的新数据),并使用javascript将原始数据替换为新数据。我找到了另一种方法,从服务器获取所有数据,并在复选框上的事件上显示新数据(预期数据)。此方法比最大化ajax调用更快,而且它还保留复选框(选中)的状态。我就是这样做的:
$("#showInactive").change(function(e,args) {
if(this.checked) {
var holder=new Array();
var i=0;
var d = (data[i] = {});
<c:forEach var="message" items="${info}">
holder[i]={
id: i,
remove: '<c:out value="${message.Id}"/>' ,
rule: '<c:out value="${message.Name}"/>',
status: '<c:out value="${message.status}"/>'
}
i++;
</c:forEach>
grid.init();
dataView.beginUpdate();
dataView.setItems(holder);
dataView.endUpdate();
dataView.refresh();
grid.invalidate();
grid.updateRowCount();
grid.render();
grid.render();
});
$(“#showInactive”).change(函数(e,args){
如果(选中此项){
var holder=新数组();
var i=0;
变量d=(数据[i]={});
持有人[i]={
id:我,
删除:“”,
规则:“”,
状态:“”
}
i++;
grid.init();
dataView.beginUpdate();
dataView.setItems(持有者);
endUpdate();
refresh();
grid.invalidate();
grid.updateRowCount();
grid.render();
grid.render();
});
请详细说明“用新数据替换原始数据”这一部分我刚才指的是您原来的问题。您说希望在用户单击复选框时替换网格中的数据。因此,您可以捕获复选框“单击”事件并调用ajax函数。在ajax调用的“成功”部分,您可以包含包含