我有一个用 ASP.NET MVC 4 编写的 Web 应用程序。在用户体验期间,客户端大量使用 JQuery 来执行保存和检索数据的请求。在某些时刻,用户可以更改一些数据并单击类似按钮的链接来保存它。对于架构/性能/要求的限制,这个过程分为两个步骤:
- POST 请求被发送到服务器到给定的 URL(这将触发某个控制器的某个动作),其中包含一个 JSON 对象;
- 在第一次 POST 成功时,计时器会设置为向同一服务器运行第二次 POST,但 URL 不同(同一控制器中的另一个操作),根本没有内容。
第二个 POST 将开始一个补充过程,并总结第一个 POST 开始的内容。但是,它永远不会获得服务器。$.ajax 方法触发错误处理程序。
第一个请求代码的简化版本是
$.ajax({
url: self.opcoes.urlCreate,
type: "POST",
data: JSON.stringify(lancamento),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
self.LancarDia(250);
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Não foi possível incluir o lançamento. O servidor retornou\n" +
ajaxErrorMessage(jqXHR, textStatus, errorThrown));
}
});
LancarDia()方法接收毫秒量来设置第二个请求的计时器,所以想法是等待 250 毫秒,然后发送第二个请求。LancarDia ()代码是:
MyClass.prototype.LancarDia = function (milisegundos) {
var self = this;
if (milisegundos) {
if (self.timerLancarDia)
clearTimeout(self.timerLancarDia);
self.timerLancarDia = setTimeout(function () {
self.LancarDia();
self.timerLancarDia = undefined;
}, milisegundos);
return;
}
$.ajax({
url: self.opcoes.urlLancarDia + self._dataAtual.format("MM/dd/yyyy"),
type: "POST",
success: function (data) {
if (self.opcoes.onLancou)
self.opcoes.onLancou(self._dataAtual);
},
error: function (jqXHR, textStatus, errorThrown) {
var mensagem = "Não foi possível atualizar o MUMPS. Motivo:\n" +
ajaxErrorMessage(jqXHR, textStatus, errorThrown);
alert(mensagem);
}
});
}
请注意,第一个 POST始终有效,第二个失败多次,但并非总是如此。当它失败时,我得到的是:
- jqXHR.status == 0
- jqXHR.readystate == 0
- textStatus == "错误"
- 错误抛出 == ""
在它的第一个版本中,代码没有使用任何计时器。在第一个 POST 成功后,第二个被立即发送。据报道,更改为当前实现可以降低问题的频率,但它仍然会发生。
只有 Chrome 显示此问题,FireFox 和 IE 运行干净。
有没有人遇到并解决了这个问题?
提前致谢