我有一个 jquery-ajax,每次调用不同的 IP 多次。然后 jquery-ajax 在负责执行 ping 的 mvc4 控制器中调用一个动作,然后返回结果。
从 Internet Explorer 开发工具中,我注意到所有 ping 请求都被标记为待处理,并且它们被一一处理。一旦处理了一个 ping 请求,就会处理队列中的下一个请求,依此类推。发生的情况是最后一个 ping 请求突然被自动取消/中止/拒绝。每个 ping 请求包含 4 次重试,每次重试超时 5 秒。但是,如果我为每次重试设置较低的超时时间,例如,750 毫秒而不是 5 秒,那么一切都可以正常工作。所以我想知道为什么最后一个 ping 请求会被自动取消......似乎最后一个被拒绝了,因为它们需要“很长时间”才能得到服务。
如果需要,我可以在这里发布一些代码,请告诉我。
我正在使用 jquery-1.10.2
更新:
ajax({
url: "/Tests/Ping/",
data: { IPAddress: IP },
type: 'POST',
dataType: 'json'
}).then(function (data) {
// Do some stuff on success
},
function (data) {
// Do some stuff on error
// here I am receiving for last ping requests:
// readyState: 0
// responseText: ""
// status: 0
// statusText: "error"
});
控制器中的操作:
[HttpPost]
public ActionResult Ping(string IPAddress)
{
(...)
System.Net.NetworkInformation.Ping pinger = new System.Net.NetworkInformation.Ping();
(...)
string data = new String('a', 32);
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 5000;
for (int i = 0; i < 4; i++)
{
reply = pinger.Send(IPAddress, timeout, buffer);
(...)
}
(...)
Response.ContentType = "application/json;charset=utf-8";
Response.StatusCode = (int)(packetsLost < 4 ? HttpStatusCode.OK : HttpStatusCode.NotFound);
return new JsonResult()
{
Data = new
{
sent = 4,
received = 4- packetsLost,
lost = packetsLost,
percentLost = (int)(packetsLost / 4* 100)
}
}
}
看到 (...) 意味着更多的代码。此外,我需要返回 http 状态代码和 json 对象,以强制在“then”的成功或错误部分输入 jquery-ajax 调用。这段代码对于很多 ping 请求都可以正常工作,但如前所述,最后一个 ping 请求与之前正常的完全一样,被标记为取消/中止/拒绝。