我需要将单个表单发布到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%的失败率是一个杀手......谢谢!
答案 0 :(得分:0)
尝试使用支持错误检查的框架,尝试在失败时重复请求。
jQuery之类的JavaScript框架支持发送帖子请求,可用于检查请求是否成功。此外,您的代码将更易于编写和维护。