在我的 asp.net mvc 4 web 应用程序中,我在控制器中的操作似乎向 jquery ajax 回调返回了无效数据...该操作正在对 IP 执行 ping 操作,并且从多个 ajax 调用中多次调用它以对多个 IP 执行 ping 操作。
我在控制器中的一部分操作(在返回的下方):
Response.ContentType = "application/json;charset=utf-8";
Response.StatusCode = (int)(packetsLost < 4 ? HttpStatusCode.OK : HttpStatusCode.NotFound);
Response.TrySkipIisCustomErrors = true;
return new JsonResult()
{
ContentType = "application/json;charset=utf-8",
Data = new
{
sent = 4,
received = 4 - packetsLost,
lost = packetsLost,
percentLost = (int) (packetsLost / 4 * 100),
responseStatus01 = statuses[0],
responseStatus02 = statuses[1],
responseStatus03 = statuses[2],
responseStatus04 = statuses[3],
responseMessage01 = responseStatuses[0],
responseMessage02 = responseStatuses[1],
responseMessage03 = responseStatuses[2],
responseMessage04 = responseStatuses[3],
rtt01 = rtt[0],
rtt02 = rtt[1],
rtt03 = rtt[2],
rtt04 = rtt[3],
ttl01 = ttl[0],
ttl02 = ttl[1],
ttl03 = ttl[2],
ttl04 = ttl[3],
minRtt = roundTripTimes.Count == 0 ? "0" : string.Format("{0}ms", roundTripTimes.Min()),
maxRtt = roundTripTimes.Count == 0 ? "0" : string.Format("{0}ms", roundTripTimes.Max()),
avgRtt = roundTripTimes.Count == 0 ? "0" : string.Format("{0}ms", roundTripTimes.Average())
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
和 jquery ajax 调用:
ajax({
url: '/Controller/Action/',
type: 'POST'
}).then(function (data) {
var _data;
try {
_data = $.parseJSON(data);
}
catch (err) {
alert("Something went bad!!!");
}
}, function (data) {
var _data;
try {
_var = $.parseJSON(data.responseText);
}
catch (err) {
alert("Something went bad!!!");
}
});
1)当操作返回http状态代码OK(200)时,jquery ajax回调中的data.responseText为空,所以我转换数据(包含正确的数据)但由于某种原因它在使用parseJSON(data)进行转换时崩溃:错误捕获说无效字符...我不知道为什么...
2)当动作返回http状态码NotFound(404)data.responseText有时(并不总是)为空并且数据中的statusText是“错误”所以我都不明白......
控制器中的操作始终返回正确的数据....
有人可以帮我检测这个错误吗?或者让我朝着正确的方向前进......
更新: 从 ie 开发工具,在网络中,我观察到一些 ping 被取消,然后在尝试处理它们时它返回空 responseText 到 ajax 回调,因此在尝试解析它时,它崩溃了。我观察到,如果我将 ping 的超时设置为较低的值,例如 750 毫秒,它可以工作,但如果我使用默认的 ping 超时,即 5 秒,那么它不起作用:一些 ping 被取消并且当试图为他们提供服务时,他们返回空的 responseText ,导致它在尝试解析 ajax 回调时崩溃。