回答
我:
$(request.responseXML).find("error").each(function() {
var error = $(this);
//do something with the error
});
从耍赖借最近在我为CB Richard Ellis(我的雇主)工作的原型项目中广泛使用了jqgrid。如documentation所述,有很多方法可以填充jqgrid:(请参阅“检索数据”节点)。
目前我做一个服务调用返回评估当一个JSON字符串,给我一个包含以下对象:
- COLUMNNAMES:字符串[]
- ColumnModels:[对象](每个对象具有属性“名称”,“索引”和“排序”)
- 数据:对象[](每个对象具有在列模型匹配的名称即属性)
- TotalRows:整数
在我的成功回调中,我手动创建了如下所示的jqgrid:(“data”是评估返回的json字符串时获得的对象)。
var colNames = data.ColumnNames;
var colModel = data.ColumnModels;
var previewData = data.PreviewData;
var totalRows = data.TotalRows;
var sTargetDiv = userContext[0]; // the target div where I'll create my jqgrid
$("#" + sTargetDiv).html("<table cellpadding='0' cellspacing='0'></table>");
var table = $("#" + sTargetDiv + " > table");
table.jqGrid({
datatype: 'local',
colNames: colNames,
colModel: colModel,
caption: 'Data Preview',
height: '100%',
width: 850,
shrinkToFit: false
});
for (var row = 0; row < previewData.length; ++row)
table.addRowData(row, previewData[row]);
所以你可以看到我手动填充数据。有超过1种服务器错误。有逻辑错误,您可以返回作为json字符串中的属性,并在尝试创建jqgrid(或基于每行)之前进行检查。
if (data.HasError) ...
或每个行的基础
for (var row = 0; row < previewData.length; ++row)
{
if (previewData[row].HasError)
// Handle error, display error in row, etc
...
else
table.addRowData(row, previewData[row]);
}
如果你的错误是在服务器上未处理的异常,那么你可能会想你的异步调用错误回调。在这种情况下,你的成功回调(大概是)创建你的jqgrid根本不会被调用。
这当然适用于手动填充jqgrid,它只是众多可用选项之一。如果您将jqgrid直接连接到服务调用或用于检索数据的函数,那么这完全是另一回事。
在文档页面上,查看基本网格>事件。在那里你会看到可能派上用场的“loadError”事件。
从我看到的情况来看,它将数据作为json字符串返回。所以你必须做的是添加一个错误处理程序,将错误的格式设置为json字符串并将其打印为一个。这可以在php中用
set_error_handler
函数。
错误处理程序然后我会推动数据到jsonReturn.error,所以你只需要检查,当你将数据添加到表。
如果你抛出异常而不是让它一路发生错误(可能是一种更好的做法),那么你会想要将异常格式化为json字符串。
,因为它是一个XML格式返回数据,你会想解析XML:
<xml>
<error>
error message
</error>
</xml>
这样的:http://marcgrabanski.com/article/jquery-makes-parsing-xml-easy
否服务器以XML格式返回数据!任何解决方案 – ZeroCool 2009-10-28 13:04:37
使用回调。如果您收到实际的http错误(例如400或500),则会触发loadError(xhr,status,error)。
但是,一些错误(如验证)不应该抛出400或500错误。但是你仍然可以在loadComplete(xhr)中捕获它们。解析你的json,并检查你用什么方式来识别错误。如果你看一下jqgrid demo site,并期待在“什么是在3.2版本的新”应该有一个关于控制服务器错误部分
if (jsonResponse.errors) { $.each(jsonResponse.errors, function(i, val){ addErrorMessage($("#"+val.field), val.message); }); }
谢谢!这正是我需要的! – 2014-03-06 16:51:46
:例如,我在我的loadComplete()这样做。
具体来说,它使用一个回调参数loadError:
loadError : function(xhr,st,err) {
jQuery("#rsperror").html("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
}
正如上面MCV指出,一些错误的数据错误,所以你需要专门处理这些。
+1这是我在Google搜索后发现此问题时所寻找的内容。我想要捕获用于获取数据的URL中发生的内部500错误。 – 2012-12-07 20:17:48
这是实际的答案。 – 2014-03-10 17:56:42
@ r00fus感谢您的回应。这真的很有帮助:D – Harshit 2015-10-05 06:56:42
function gridCroak(postdata, _url, grid, viewCallBack, debug) {
$(".loading").css("display", "block");
$.ajax({
type: 'POST',
url: _url,
data: postdata,
dataType: "xml",
complete: function(xmldata, stat){
if(stat == "success") {
$(".loading").css("display", "none");
var errorTag = xmldata.responseXML.getElementsByTagName("error_")[0];
if (errorTag) {
$("#ErrorDlg").html(errorTag.firstChild.nodeValue);
$("#ErrorDlg").dialog('open');
} else {
var warningTag = xmldata.responseXML.getElementsByTagName("warning_")[0];
if (warningTag) {
$("#WarningDlg").html(warningTag.firstChild.nodeValue);
$("#WarningDlg").dialog('open');
} else {
if (debug == true) {
alert(xmldata.responseText);
}
jQuery(grid)[0].addXmlData(xmldata.responseXML);
if(viewCallBack) viewCallBack();
}
}
} else {
$("#ErrorDlg").html("Servizio Attualmente Non Disponibile !");
$("#ErrorDlg").dialog('open');
}
}
});
}
,并在网格
datatype : function(postdata) { gridCroak(postdata, 'cgi-bin/dummy.pl?query=stock',
"#list", null, false) },
在它使用同样的方法,我认为结束。
感谢所有
您可以使用jqGrid的定义loadError
事件(见documentation)。例如:
//Catch errors
loadError = function(xhr, textStatus, errorThrown) {
var error_msg = xhr.responseText
var msg = "Some errors occurred during processing:"
msg += '\n\n' + error_msg
alert(msg)
}
另一件事要记住/或我发现是,如果你正在使用Asp.net你需要把
的部分 - 这将让你反思回来的消息好。
如果您使用的jqGrid与选项
ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
datatype: "json",
url: wsPath
通过AJAX和Web服务或MVC控制器来加载数据,那么这个答案是给你的。
注意如果在处理AJAX调用的web方法中发生运行时错误,它不能通过loadError捕获,因为loadError只捕获HTTP相关的错误。您应该更倾向于通过try ... catch
在网络方法中发现错误,然后使用return JsonString
在catch块中以JSON格式传递它。然后,它可以在loadComplete事件的处理方式:以上
loadComplete: function (data) {
if (this.p.datatype === 'json') {
if (data!==undefined && data!==null && isErrorJson(data)) {
ShowErrorDialog(getJsonError(data));
}
// ...
}
的功能具有以下含义,根据需要执行这些:
isErrorJson(data)
:返回true,如果数据对象包含如在定义的错误您的网络方法getJsonError(data)
:返回网络方法中定义的错误消息的字符串ShowErrorDialog(msg)
:在屏幕上显示错误消息,例如通过jQueryUI对话框。
在Web服务方法,您可以使用JavaScriptSerializer
创建这样一个错误的对象,为2种JavaScript方法上面,你可以使用jQuery函数$.parseJSON(data.d)
得到消息出来的JSON对象。
- 1. 如何让ASP.NET识别我的自定义服务器控件?
- 2. 如何将选定的行值从jqGrid发送到服务器?
- 3. Android C2DM服务器发送错误
- 4. 捕获发送给Google语音识别服务器的音频
- 5. 如何在发送之前找出jqGrid发送给服务器的内容?
- 6. jqgrid编辑操作如何向服务器发送变量?
- 7. 服务器无法识别json,使用restSharp发送请求
- 8. UISwipeGestureRecognizer抛出无法识别的选择器发送错误
- 9. 发送无法识别的选择器。 Objective-C错误
- 10. - [NSDate dateFromString:]:无法识别的选择器发送错误
- 11. 未识别的选择器已发送到实例错误
- 12. Swift错误 - “无法识别的选择器发送到实例”
- 13. iPhone:“无法识别的选择器发送到实例”错误
- 14. iOS无法识别的选择器发送到实例错误
- 15. 无法识别的选择器发送到实例错误?
- 16. 如何使用php发送服务器错误响应?
- 17. 如何从'n'个服务器中识别MongoDB主服务器
- 18. 如何识别哪个按钮被按下并发送到服务器?
- 19. WCF:识别服务器端的时钟歪斜错误
- 20. 气流:错误:无法识别的参数:网络服务器
- 21. xcode无法识别选择器发送到实例错误
- 22. 识别服务器的别名
- 23. 是否有可能让JqGrid发送一个JSON QueryString到服务器?
- 24. 浏览器消息服务器如何识别特定浏览器发送推送通知消息
- 25. 如何让所有参数发送到服务堆栈服务?
- 26. 识别服务
- 27. 如何让Apache服务器发送特定标头
- 28. 如何让服务器向客户端发送连接消息?
- 29. 服务器发送的事件:如何触发发送
- 30. (jqGrid)向服务器发送额外的自定义参数
嘿山姆...如果你还没有看到它.. http://skysanders.net/code/jQGridWS/default.aspx 你可能可以重用一些它,也许添加一些例外处理能力。 – 2010-02-05 06:42:33