Я пытаюсь реализовать сетку autorefresh и останавливаться при редактировании/добавлении/поиске пользователя, поэтому я использую clearInterval в событии ondblClickRow (поскольку я использую встроенное редактирование).
Итак, моя проблема в том, когда и где перезапустить автозагрузку. Я пытаюсь в loadComplete событие, которое, кажется, место для beter, НО каждый раз loadComplete запускает setInterval() для reloadGrid, он "умножает" вызов reloadGrid! Другими словами, первый раз (через 8 секунд) он перезагружается нормально. Второй раз он вызывает 2 перезагрузки. В третий раз он вызывает 4 перезагрузки. В четвертый раз он называет 8 перезагрузок и т.д.... это означает, что каждый раз каждый аякс-запрос!
Что неверно? Я был бы признателен за помощь, спасибо!
Вот мой код:
var mySeconds = 10 * 1000; //seconds *1000
var myTimer;
function autoReloadGrid($grid) {
$grid.trigger("reloadGrid", [{current:true}]);
};
var $myGrid = $("#myGrid");
$myGrid.jqGrid({
//grid options here...
ondblClickRow: function(rowId) {
clearInterval(myTimer);
//editRow here...
},
loadComplete: function() {
console.log('myTimer = ' + myTimer);
myTimer = setInterval( function() { autoReloadGrid($myGrid) }, mySeconds);
}
})
Примечание. Я тестирую значение myTimer с помощью console.log, и каждый раз, когда он запускается, он показывает разные идентификаторы.
Основная проблема в вашем коде заключается в следующем: вы можете создавать несколько таймеров, которые выполняют autoReloadGrid
. Вы отменяете только последний созданный таймер внутри ondblClickRow
.
Важно понимать, что loadComplete
может выполняться несколько раз: по поисковому loadComplete
, сортировке и т.д. Поэтому я рекомендую включить вызов clearInterval
перед setInterval
.
clearInterval(myTimer);
toif (myTimer !== undefined) { clearInterval(myTimer); }
, но это на самом деле не требуется.