我需要将一个表单发布到 2 个不同的 URL。一个只是一个日志脚本,因此不需要将响应传递回用户。
不幸的是,在这种情况下,我不能只发布到单个 PHP 脚本并转身使用 Curl 重新发布它。这必须在用户的浏览器中完成。
这是我现在正在使用的一些 Javascript,但对于几乎所有主要浏览器来说,它都以看似随机的速度失败(但在 95% 以上的时间里都有效)。表单的其余部分确实需要 Javascript 才能运行,所以我知道问题不仅仅是某些用户关闭了 Javascript。
function makePOSTRequest(url, parameters) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
}
我在另一个函数中手动构建请求后调用它,然后调用表单的 submit() 函数。
任何人都可以提出一个可能更好的替代方案吗?这似乎在大约 95% 的时间内有效,但 5% 的失败率是一个杀手……谢谢!