Данные, поступающие как часть вызова ajax из моего бизнес-класса, выглядят следующим образом:
[{
"user_action": "<button class='detail-icon' title='Vehicle Pass History'onclick='javascript:openPopUpWagonList('DIM 008065');'> <img src='/WIMS/images/icon_detail.png'></button>",
"VEHICLE_ID": "DIM 008065",
"setFlag": "<img src='/WIMS/images/wims-tick.gif'>",
"clrFlag": "<img src='/WIMS/images/wims-tick.gif'>",
"setDate": "31 Jul 2010 11:11",
"lastClearDate": "24 Aug 2010 07:26",
"noOfdays": "24",
"ownerCode": "",
"operatorCode": "",
"maintainerCode": "",
"severity10Pass": "~",
"plot": "<button class='detail-icon' title='Plot' alt='Detail'onclick='javascript:popUpStepChangeListGraph('DIM 008065');'> <img src='/WIMS/images/icon_detail.png'></button>",
"activeFlag": "1"
}, {
"user_action": "<button class='detail-icon' title='Vehicle Pass History'onclick='javascript:openPopUpWagonList('N 005276');'> <img src='/WIMS/images/icon_detail.png'></button>",
"VEHICLE_ID": "N 005276",
"setFlag": "<img src='/WIMS/images/wims-tick.gif'>",
"clrFlag": "",
"setDate": "31 Aug 2011 10:05",
"lastClearDate": "24 Mar 2011 10:45",
"noOfdays": "0",
"ownerCode": "",
"operatorCode": "",
"maintainerCode": "",
"severity10Pass": "~~~",
"plot": "<button class='detail-icon' title='Plot' alt='Detail'onclick='javascript:popUpStepChangeListGraph('N 005276');'> <img src='/WIMS/images/icon_detail.png'></button>",
"activeFlag": "1"
}]
Здесь я взял только 2 записи для удобства чтения, но я отображаю более 150 таких записей.
Теперь мой формат вызова ajax со страницы JSP выглядит следующим образом:
$.ajax({
type: "POST",
url: f_reqAction, // url is set already
data : {maintainer:maintainerValue,show:showValue},
dataType:'json',
async: true, /* If set to non-async, browser shows page as "Loading.."*/
cache: false,
timeout:80000, /* Timeout in ms */
success: handleApplyEventResponse,
error: handleResponseError
});
function handleApplyEventResponse(response) {
// response is coming from my business class
$("#stepChangeData").jqGrid('clearGridData');
if(response.length > 0){
for(var i=0;i<response.length;i++){
jQuery("#stepChangeData").jqGrid('addRowData',i+1,response[i]);
}
$('#stepChangeData').setGridParam({rowNum:response.length});
}
}
Когда я хочу удалить данные, вызвав jQuery("#gridtabID").jqGrid('clearGridData');
, появляется сообщение об ошибке JavaScript, предлагающее прекратить запуск скрипта. но если размер данных небольшой, например 20 или 30, проблема не возникает.
Я понимаю, что заполнение данных ответа вызовом jqGrid('addRowData'
внутри цикла for неэффективно, когда данные настолько велики. но я не смог найти API jqgrid, который может добавить эти данные ответа непосредственно в сетку без каких-либо циклов.
И я не смог создать кнопки, содержащиеся в моих данных json, с помощью параметра форматирования colModel
, так как мне было очень сложно создать этот тип кнопки с помощью formatter. Поэтому я создал ее в своем бизнес-лигике и отправил в jsp страница с данными json как часть ajax respose.
Так что в вышеприведенном контексте я бы хотел иметь API, который мог бы срочно установить эти данные json в сетку (т. Е. Без зацикливания). И я думаю, что таким образом эту проблему сценария можно было бы избежать.