我不知道为什么会这样: 在调试过程中,java中抛出了一个错误,然后我就不能再运行jqgrid了。例如,我故意在java中拼写错误的sql语法,抛出一个异常然后我再次查询一次好的更改后就不能再对java程序执行了。显示在屏幕上“加载”闪过,jqgrid还没有做任何事。然后我必须重新启动tomcat再次调试。只要造成这种情况的任何异常的背景。
抱歉我的英语不好。
有没有办法改善这种情况?感谢
这是我的代码:
$.ajaxSetup({ cache: false });
var colspan = 5;
//the last modified cell's iRow and iCol
var lastedit = [];
//color array
var colorarray = new Array(['invalid_normal', 'invalid_manual','invalid_swap','invalid_business'],['valid_normal','valid_manual','valid_swap','valid_business']);
$.ajax(
{
type: "GET",
url: "/cbill/routenew/routequerydata.do",
data: "",
dataType: "json",
success: function(result){
var colModel = createcolModel(result.colModel);
var grid = jQuery("#gridTable");
grid.jqGrid({
jsonReader: {
root: "gridModel", // (2)
records: "record", // (3)
repeatitems : false // (4)
},
url: '/cbill/routenew/freshgriddata.do',
datatype: 'json',
mtype: "GET",
colModel :colModel,
pager: "#gridPager",
rowNum: 50,
rowList: [50,100],
height: 500,
loadonce:false,
//width: 1500,
//autowidth: true,
//colNames: colModelData,
viewrecords: true,
prmNames: {search: 'search'}, //(1)
caption: "Route",
position:"last",
multiselect: true,
multiboxonly:true,
toppager: true,
rownumbers:true,
shrinkToFit:true,
hidegrid: false
});
grid.jqGrid('navGrid','#gridPager',{del:false,add:false,edit:false},{},{},{},
{
caption: "Search",
Find: "Go!",
Reset: "Reset",
//refresh: true,
closeAfterSearch: true,
multipleSearch: true,
groupOps: [{ op: "AND", text: "All" }],
cloneToTop: true
}
).navButtonAdd('#gridPager_left',{
caption:"RT Modify",
buttonicon:"ui-icon-newwin",
onClickButton: function(){
$("#rowdata").jqGrid('GridUnload');
var ids = grid.jqGrid('getGridParam','selarrrow');
if (ids.length == 1) {
var entirerow;
for (var i=0, il=ids.length; i < il; i++) {
var entirerow = grid.jqGrid ('getRowData',ids[i]);
}
//alert(entirerow.vc2routeno);
lastedit = loadComparisonRowData(entirerow, colModel);
}else{
alert("Please select one route!");
return false;
}
},
position:"last"
}).navSeparatorAdd("#gridPager_left",{sepclass : 'ui-separator',sepcontent: ''}).navButtonAdd('#gridPager_left',{
caption:"State Modify",
buttonicon:"ui-icon-newwin",
onClickButton: function(){
$("#rowdata").jqGrid('GridUnload');
var ids = grid.jqGrid('getGridParam','selarrrow');
if (ids.length != 0) {
if($("#gridPager_left").find("#vc2subroutecode").val()=='' && $("#pg_gridPager").find("#vc2subroutecode").val()==''){
alert("Please enter the sub-route code!");
return false;
}
var rowcells=new Array();
var vc2updrouteno=new Array();
for (var i=0, il=ids.length; i < il; i++) {
var entirerow = grid.jqGrid ('getRowData',ids[i]);
rowcells.push(entirerow);
vc2updrouteno.push(entirerow.vc2routeno);
}
loadSelectedRowData(rowcells, vc2updrouteno, colModel);
}else{
alert("Please select route!");
return false;
}
},
position:"last"
});
$('#gridPager_left').clone(true).insertBefore('#gridTable_toppager_left')
$('#gridTable_toppager_left').remove();
$("#resetSearch").click(function() {
var grid = $("#gridTable");
grid.jqGrid('setGridParam',{search:false});
var postData = grid.jqGrid('getGridParam','postData');
$.extend(postData,{filters:""});
// for singe search you should replace the line with
// $.extend(postData,{searchField:"",searchString:"",searchOper:""});
grid.trigger("reloadGrid",[{page:1}]);
});
//$('.ui-jqgrid-hdiv').hide();
$("#consoleDlg").dialog({
autoOpen: false,
modal: false,
resizable: true,
height: 620,
width: 1200,
open: function(event, ui) { $(".ui-dialog-titlebar-close").hide(); },
buttons: { //
"Cancel": function() {$("#consoleDlg").dialog("close");},
"Update" : function(){updateRouteInfo(colModel)},
"Confirm": updateRouteFlag,
"I Know": copyToClipboard
}
});
},
error : function(textStatus, errorThrown) {
alert("route list error: " + textStatus);
}
});
嗨oleg,谢谢你的建议。
实际上,我的困惑是因为服务器端java导致导致客户端jqgrid无法运行的错误。我不知道是否我调用grid.jqGrid ('GridUnload', '# gridTable')
来解决这个问题,因为现在我甚至不知道在哪里放这个方法,因为在服务器端抛出异常,我不知道捕获它的是什么事件然后调用此方法。当url'/ cbill / routenew / freshgriddata.do'导致错误时,我不知道grid.jqGrid ({/ * parameters */})
中处理异常的位置;
当发生java错误并刷新页面时,会抛出一个客户端异常:
error: function (textStatus, errorThrown) {
alert ("route list error:" + textStatus);
}
'/ cbill / routenew / routequerydata.do'
和'/ cbill / routenew / freshgriddata.do'
都没有在服务器端执行。
我在这里有两个弹出窗口来修改一些数据:
"Update" : function(){updateRouteInfo(colModel)},
"Confirm": updateRouteFlag,
与我上面说的相同,每当在这些代码中抛出异常时,我都无法执行查询,并且在刷新页面时会出现上面的客户端异常。 (我在所有代码中都有几个错误函数,java异常总是会在上面的frist错误函数中导致客户端出错,我认为错误状态保存到jqgrid)
当然,我尝试改进服务器端代码以避免错误,但无法避免所有错误。如果后台发生异常,则jqgrid程序模块将不会运行。
我不知道是否要表达我的意思。我希望你能得到更多帮助。感谢
答案 0 :(得分:0)
永久“加载”消息通常意味着从服务器加载网格数据,但由于某些原因,它在JavaScript代码中的某处是异常。我建议您使用一些调试器(例如Internet Explorer的Developer Tools)来本地化错误/异常的位置。
一次尝试加载数据的问题可能是因为您一次使用上面的代码。问题是如下。 jqGrid在您使用的<table id="gridTable"></table>
上构造一些div和许多其他HTML元素。因此,您应该每个网格只调用grid.jqGrid({/*parameters*/});
一次。如果您确实需要重新加载列定义,然后重新加载页面上的网格,则应调用GridUnload:grid.jqGrid('GridUnload','#gridTable')
,然后重新分配grid
变量:grid = jQuery("#gridTable");
。请参阅the answer相应的演示示例。
还有一句话。我不建议您使用$('#gridPager_left').clone(true)
。相反,您可以使用navGrid
的{{3}}参数:
grid.jqGrid('navGrid','#gridPager',{cloneToTop:true, ...}
要向标准底部寻呼机添加按钮,您应该像"#gridPager"
或'#gridTable_toppager'
而不是"#gridPager_left"
和'#gridTable_toppager_left'
一样。此外,你不应该删除任何jqGrid元素,只要你不需要它隐藏它。例如,代码$('#gridTable_toppager_left').remove();
似乎很危险。