Ответ проверки Jqgrid идет как onSucces, так и On error

Я выполняю проверку на стороне сервера и возвращаю значения на основе выполненной проверки. Однако мой контроль переходит к функции onError после функции on success.

Ниже мой код. Просьба просить о помощи. Спасибо заранее.

 formatoptions: {
            restoreAfterError:false,
            keys: true, // we want use [Enter] key to save the row and [Esc] to cancel editing.
            onEdit: function (rowid) {

                $('#newDetailCodeGroup').attr('disabled','disabled').addClass("btnDisabled").removeClass("btnNormalInactive");
                //alert("in onEdit: rowid=" + rowid + "\nWe don't need return anything");
            },
            onSuccess: function (jqXHR) {
                $('#newDetailCodeGroup').attr('disabled','disabled').addClass("btnDisabled").removeClass("btnNormalInactive");
                $('input[id*="gs_"]').val("");
                var selRow = $grid.jqGrid('getGridParam', 'selrow');
                var errors = jQuery.parseJSON( jqXHR.responseText );
                if(!jQuery.isEmptyObject( errors ))
                {
                    if(errors.groupDesc){
                        jQuery('#' + selRow + '_groupDesc').css({'background':'#fff0f0','border':'1px solid red','color':'red'});
                        jQuery('#' + selRow + '_groupDesc').attr('title',errors.groupDesc);
                    }
                return false;
                }else{
                    $grid.setGridParam({ search: false, postData: { "filters": ""} ,datatype: 'json'}).trigger("reloadGrid");
                }



                // the function will be used as "succesfunc" parameter of editRow function
                // (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#editrow)
                /*alert("in onSuccess used only for remote editing:" +
                    "\nresponseText=" + jqXHR.responseText +
                    "\n\nWe can verify the server response and return false in case of" +
                    " error response. return true confirm that the response is successful");
                // we can verify the server response and interpret it do as an error
                // in the case we should return false. In the case onError will be called
                return true;*/
            },
            onError: function (rowid, jqXHR, textStatus) {
                $grid.setGridParam({ search: false, postData: { "filters": ""} ,datatype: 'json'}).trigger("reloadGrid");
                // the function will be used as "errorfunc" parameter of editRow function
                // (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#editrow)
                // and saveRow function
                // (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#saverow)
                /*alert("in onError used only for remote editing:" +
                    "\nresponseText=" + jqXHR.responseText +
                    "\nstatus=" + jqXHR.status +
                    "\nstatusText" + jqXHR.statusText +
                    "\n\nWe don't need return anything");*/
            },

1 ответ

Такое поведение соответствует коду onSuccess потому что ты вернулся false от него. Вы можете просто вернуть false от onSuccess (что соответствует successfunc обратный вызов встроенного редактирования), если вы обнаружите, что ответ сервера содержит ошибку. Внутри onError (что соответствует errorfunc из встроенного редактирования) вы должны просто отобразить сообщение об ошибке, декодированное из ответа сервера, и не делать reloadGrid если вы хотите, чтобы пользователь мог исправить ошибку в текущей редактируемой сетке.

Кстати было бы логичнее использовать reloadGrid Внутри afterSave (что соответствует aftersavefunc обратный вызов встроенного редактирования), а не внутри onSuccess, Кроме того, я рекомендую вам разместить .trigger("reloadGrid") внутри setTimeout, Это позволяет jqGrid завершить стандартную обработку встроенного редактирования и делает reloadGrid после этого.

Другие вопросы по тегам