Javascript 如果web服务关闭,如何以JSON对象的形式返回错误消息
我在asp.net mvc web应用程序中有以下操作方法,该应用程序调用web服务并将Json结果返回给视图:-Javascript 如果web服务关闭,如何以JSON对象的形式返回错误消息,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我在asp.net mvc web应用程序中有以下操作方法,该应用程序调用web服务并将Json结果返回给视图:- public ActionResult ListPackages() { using (var client = new WebClient()) { try{ var query = HttpUtility.ParseQueryString(string.Empty); UriBuilder("htt
public ActionResult ListPackages()
{
using (var client = new WebClient())
{
try{
var query = HttpUtility.ParseQueryString(string.Empty);
UriBuilder("http://localhost:8080/jw/web/json/workflow/package/list");
url.Query = query.ToString();
string json = client.DownloadString(url.ToString());
Thread.Sleep(500);
return Content(json, "application/json");
}
catch (System.Net.WebException ex) {
return Content("Error, service is down. please try again later", "application/json");
}
}
}
然后在视图上,我定义了以下Ajax.Actionlink:-
@Ajax.ActionLink("Get Process List", "ListPackages", "Home",
new AjaxOptions
{
HttpMethod = "GET",
LoadingElementId = "tobehide",
OnSuccess = "getpackagelist"
})
以及以下getpackagelist java脚本:-
function getpackagelist(result) {
$('#products').empty();
$('#title').text("All Processes");
$.each(result.data, function (key, val) {
var str = val.packageName;
$('<li/>', { text: str }).appendTo($('#products'));
});
$('#tobehide').hide();
}
其作用方法如下:-
function getpackagelist(result) {
if (result.error == null) {
$('#products').empty();
$('#title').text("All Processes");
$.each(result.data, function (key, val) {
var str = val.packageName;
$('<li/>', { text: str })
.appendTo($('#products'));
});
$('#tobehide').hide();
}
else {
$('<li/>', { text: result.error })
.appendTo($('#products'));
}
catch (System.Net.WebException) {
return new JsonResult()
{
Data = new { error = "Error, service is down. please try again later" }
};
但在WebEx怀疑被引发时,仍然不会显示任何错误。
BR编辑
正如john G纠正我的,当然这里不会调用OnFailure
,因为异常正在控制器中捕获。因此,要返回有效的JSON结果,请使用以下命令:
return new JsonResult() {
Data = new { error = "Error, service is down. please try again later" }
};
这只是创建一个匿名类型(以及JsonResult
)作为返回任意JSON的简单方法。然后在OnSuccess
脚本中,检查error
属性:
function getpackagelist(result) {
if (result.error) {
// display error ...
} else {
// success ...
}
}
使用
AjaxOptions
的OnFailure
属性来处理错误场景
new AjaxOptions
{
// ...
OnFailure = "packagelisterror"
}
请注意,函数将传回包含responseText
属性的JSON对象。因此,您可以使用以下方式显示错误消息:
function packagelisterror(e) {
$("#products").html(e.responseText);
}
不确定你的代码是否能工作。因为如果您正在处理一个异常,那么on failure将不会启动,并且Onsuccess仍将启动。在这种情况下,新代码将无法工作。。我想你指的是JsonResult()而不是JsonResultContent()。@johnG是的,对。。。我认为我现在得到的答案(最后)是正确的。谢谢你的帮助。@johnG好吧。。。在从AJAX调用返回JSON字符串并接受异常的情况下,包含状态/错误字段是标准的。也许更标准的做法是简单地从服务返回一个错误代码,然后使用
OnFailure
AJAX回调来显示一条通用错误消息。@johnG我已经测试了您的编辑,它现在对我有效。我建议使用alert(JSON.stringify(result))
检查result
中实际发送的内容。