【发布时间】:2017-11-10 16:56:05
【问题描述】:
我正在使用 jqGrid 4.13.3 - 免费。
我需要使用 editRow 的 errofunc 回调,但在访问表单(页面)时出现 JavaScript 错误,显示预期为“)”。在代码中,我让 cmets 解释什么是有效的,然后进行了导致错误的更改。
function oSelect(id, status, e) {
selID = id;
rejflag = $("#kcdimensionlist").getRowData(id)['rejectedi'];
$("#kcdimensionlistV7").setColProp('rejectedi', {
editoptions: {
dataUrl: '/QMSWebApp/GenericControllerServlet?lifecycle=twowayoptionlist'
},
defaultValue: 0
});
$("#kcdimensionlistV7").setColProp('rechecki', {
editoptions: {
dataUrl: '/QMSWebApp/GenericControllerServlet?lifecycle=threewayoptionlist_NA'
},
defaultValue: 0
});
var target = $(e.target);
if (!target.is("img")) {
if (id && id !== lastsel) {
$("#kcdimensionlistV7").jqGrid('restoreRow', lastsel);
//This line works fine but when commented out and modified to next line it fails
//$("#kcdimensionlistV7").jqGrid('editRow',id,true);
$("#kcdimensionlistV7").jqGrid('editRow', id, true, errorfunc: eFunc);
lastsel = id;
}
}
};
这是我的eFunc 函数:
function eFunc(response, rowid) {
var res = $.parseJSON(response.responseText);
if (res) {
if (!res.errorCode) {
return [false, res.errorMsg];
} else {
return [true];
}
}
}
更新代码:
function oSelect(id, status, e) {
selID = id;
rejflag = $("#kcdimensionlist").getRowData(id)['rejectedi'];
$("#kcdimensionlistV7").setColProp('rejectedi', {
editoptions: {
dataUrl: '/QMSWebApp/GenericControllerServlet?lifecycle=twowayoptionlist'
},
defaultValue: 0
});
$("#kcdimensionlistV7").setColProp('rechecki', {
editoptions: {
dataUrl: '/QMSWebApp/GenericControllerServlet?lifecycle=threewayoptionlist_NA'
},
defaultValue: 0
});
var target = $(e.target);
if (!target.is("img")) {
if (id && id !== lastsel) {
$("#kcdimensionlistV7").jqGrid('restoreRow', lastsel);
$("#kcdimensionlistV7").jqGrid('editRow', id, {
keys: true,
errorfunc: eFunc
});
lastsel = id;
}
}
};
function eFunc(response, rowid) {
alert("Here");
var res = $.parseJSON(response.responseText);
if (res) {
alert(res.errorCode);
if (!res.errorCode) {
return [false, res.errorMsg];
} else {
return [true];
}
}
}
这是我用于测试的 servlet 代码:
else if (lifecycle.equals("editdimensiondatamodelV7")) {
boolean status = false;
String returnMsg = "This is a test";
if (request.getParameter("oper").equals("edit")) {
}
jReturnString = "{\"errorCode\": " + status + ", \"errorMsg\": \"" + returnMsg + "\"}";
response.getWriter().write(jReturnString);
}
更新:
错误函数代码:
function eFunc(res, rowid) {
var errorText = $.parseJSON(res.responseText).Message;
alert("Here: " + errorText);
return [false];
}
Servlet 代码注释注释:
else if (lifecycle.equals("editdimensiondatamodelV7")) {
//Would like to send a dynamic message back - Example: Dimensions are ouside of tolerance
if (request.getParameter("oper").equals("edit")) {
response.setStatus(500);
}
}
eFunc 永远不会返回警报,并且一个正在发送...对话框出现在网格上。
【问题讨论】:
-
eFunc 根本没有被调用。
-
errorfunc与 jqGrid 或 jQuery 的所有其他回调一样,只有在服务器响应具有 HTTP 错误代码 (>=400) 时才会被调用。例如,您可以使用response.setStatus(500)(或response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR)。 -
@Oleg:我确实触发了 errorFunc。但这不是我所期望的。我想将编辑数据发送到 servlet,如果它不符合某些条件,我想将消息发送回调用者。最好使用内联 editRow 方法。
-
通常只需将用户编辑的任何数据发送到服务器。您的服务器代码进行验证并进行更改或返回用户可以理解的错误描述。如果服务器返回成功的 HTTP 代码,则 jqGrid 进行了更改,否则 - 它调用
errorfunc并为用户显示错误消息。 -
@Oleg:所以我在服务器上使用 response.setStatus(500) 来触发 errorfunc,但是如何将我在服务器上创建的消息发送回 errorfunc。我得到 errorfunc 收到响应,但是如何在响应中获取消息并在 errorfunc 触发时从响应中读取它?
标签: javascript java free-jqgrid