-1

我需要将一个表单发布到 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% 的失败率是一个杀手……谢谢!

4

1 回答 1

0

尝试使用支持错误检查的框架,尝试在失败时重复请求。

像 jQuery 这样的 JavaScript 框架支持发送 post 请求,并且可以用来检查请求是否成功。此外,您的代码将更容易编写和维护。

于 2013-05-17T19:01:02.050 回答