【发布时间】:2013-11-14 07:18:51
【问题描述】:
我有一个 jquery-ajax,每次都使用不同的 IP 调用多次。然后 jquery-ajax 调用 mvc4 控制器中负责执行 ping 的操作,然后返回结果。
从 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 请求与之前正常的完全一样,被标记为取消/中止/拒绝。
【问题讨论】:
-
请添加代码以显示问题。
-
您正在向不同的主机发出 ajax 请求 - 具体如何?目标主机是否使用适当的 CORS 标头进行响应?
-
帖子已更新。见上文。
-
您在 Chrome 或 Firefox 控制台中是否遇到任何错误? XHR 请求应该与所有请求和响应标头一起显示在那里。
-
@HMR 在 Firefox 中似乎可以工作,但在 Internet Explorer 10 中却不行。在 Internet Explorer 中,我看不到任何已取消的信息,因为它们在处理之前已被取消。
标签: javascript ajax jquery