什么会导致XHR被覆盖?我假设这就是这里发生的事情。
我正在设置状态和代码,在这里显示,有一个帮助类:
if (program.Name == programName)
{
ServiceHelper.SetHttpError(501, "'Program Name' Already Exists.'");
return;
}
类:
public static void SetHttpError(int statusCode, string message)
{
HttpContext.Current.Response.StatusCode = statusCode;
HttpContext.Current.Response.StatusDescription = message;
}
处理xhr:
function CallService(method, jsonParameters, successCallback, errorCallback)
{
if (errorCallback == undefined)
{
errorCallback = function(xhr) {
if (xhr.status == 501) {
alert(xhr.statusText);
}
else {
alert("Unexpected Error");
}
}
}
$.ajax({
type: "POST",
url: method,
data: jsonParameters,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: successCallback,
error: errorCallback
});
}
有一段时间这是有效的......现在警报显示的所有内容都是“错误”而不是我提供的消息..
有什么想法吗?
答案 0 :(得分:1)
您使用的是哪个版本的jQuery?最新的文档说错误回调的签名是:
error(jqXHR, textStatus, errorThrown)
您的消息可能在textStatus
参数中。
您是否尝试使用FireBug打破错误功能并查看xhr
对象的属性?
答案 1 :(得分:0)
我遇到了一个类似的问题,即未设置statusText,但仅在IIS上使用HTTPS时才设置,而在纯HTTP上也可以使用。我最终发现了IIS only supports HTTP2 on TLS,并且在HTTP2中不再有状态码描述。 当我使用Fiddler进行故障排除时,它可能同时在http和https中起作用,可能是由于this!
在ASP.NET MVC中,您不再可以使用HttpStatusCode(code,description),因为该描述将无处可去。您必须通过说明,例如放入响应主体。或暂时禁用HTTP2。