我有一个基于浏览器的客户端,该客户端对PHP / Apache后端进行AJAX调用。单击按钮时,客户端将遍历“提供商”列表,并向每个具有完全相同有效负载的Ajax请求发送。
随机地,循环中的某些请求以空白的POST正文到达服务器端。真正奇怪的是,同一循环中的其他请求已正确填充。有时,我们看到循环中的所有项目都带有一个空白的主体,有时还会看到其中的一些项目。真的很奇怪!
环境详细信息:
Client = JQuery 3.3.1,JQueryUI 1.12.1,Bootstrap 3.3.7,JQuery validate 1.19.0
服务器= Apache 2.4,PHP 7.1
我们实际上无法在开发环境中重现该问题,但是登录生产显然表明这是每天定期发生的(可能是请求的5%)。我们已经在客户端浏览器上部署了监视程序,以捕获任何错误,并且没有任何异常或看起来可能与之相关的事情。
以下示例显示了我们在客户端所做的事情。
1)将click事件绑定到
2)单击时,填充请求对象
3)遍历“提供者”列表,将请求从2发布到PHP服务器
$(document).ready(function() {
bindEvents();
}
function bindEvents() {
$("#myButton").click(function(event) {
event.preventDefault();
handleClick();
});
}
function handleClick() {
var request = ...;
...
var save=false;
if (....) {
save=true;
}
var providers = ["provider1", "provider2", "provider3", "provider4", "provider5", "provider6"];
var ndx;
for (ndx=0; ndx<providers.length; ++ndx) {
doRequestSend("action/"+(save?"save":"verify"), request, providers[ndx]);
}
}
function doRequestSend(action, request, provider) {
request['apiKey']=getAPIKey();
var url=baseURL+"/api/"+provider+"/"+action;
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(request),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
...
},
failure: function(errMsg) {
...
},
error : function(jqXHR, textStatus, errorThrown) {
...
}
});
}
很显然,当我无法复制时,很难找出问题所在。但是,希望有人可以发现可能导致问题的方法出现问题。
或者,对任何随机/疯狂的想法持开放态度,这些想法可以解释如何发生这种情况!循环中的某些请求可以正常执行,而其他请求则可以保持空白!
注意: -尽管每次迭代都将POST循环循环到一个略有不同的url,但在服务器端,它们都结束于相同的入口点,并且要做的第一件事是记录正文(这就是我们知道它为空白的方式) !) -(迄今为止)似乎唯一遇到此问题的浏览器是Windows上的Chrome 73和74。这可能不相关!
有人想出任何想法或尝试来寻找源头吗? 干杯!