我试图通过ajax调用来测试Json表示法中的错误。这是我的服务器方法asp.net无法正常返回json错误
[System.Web.Services.WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string publicarError()
{
try
{
throw new Exception("error");
}
catch (Exception ex)
{
Dictionary<string, object> error = new Dictionary<string, object>();
error.Add("success", false);
error.Add("message", "Something really bad happened");
string output = JsonConvert.SerializeObject(error);
return output;
}
}
这是我的Ajax调用
$.ajax({
type: "POST",
url: pageUrl + '/publicarError',
data: '{valor: ' + $('#<%=classroomDropDownList.ClientID%>').val() + '}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function() { alert('ok'); },
error: function (xhr, textStatus, exceptionThrown) {
var json = xhr.responseText;
var result = [];
result = eval('(' + json + ')');
var errorMessages = [];
//this ugly loop is because List<> is serialized to an object instead of an array
for (var key in result) {
errorMessages.push(result[key]);
}
$('#result').html(errorMessages.join("<br />"));
},
但是当我运行的例子,它总是在更迭功能输入,而不是在错误之一。
我不知道为什么。有什么错误吗?
JQuery只是在寻找一个有效的响应。您的方法将返回有效的JSON作为Exception的一部分,并且不会更改HttpStatus,因此JQuery不会了解其中的差异。如果您在ajax调用中从成功(result)函数内部提示JSON.Stringify(result),您可能会得到错误对象。 – nixkuroi
它是一个很好的观点,我会尝试看看警报。 HttpStatusCode我不能改变,因为该方法是静态的。所以我不知道如何在静态方法中访问Context.Response.StatusCode –