如何将JavaScript自动POST的状态代码获取到另一个域

How to get the status code of a JavaScript auto-POST to another domain

本文关键字:获取 代码 另一个 状态 JavaScript 自动 POST      更新时间:2023-09-26

我们正在构建一个SAML解决方案,在某个阶段,我们提供一个预先填充了各种参数的html表单,设置为POST到独立于我们的web服务上的端点。然后通过JavaScript自动提交该表单。(即这是SAML POST绑定)

对于调试来说,如果我们能发现这个自动POST是否成功,那将是非常有用的。有人知道我们该怎么做吗?只要能够获得HTTP状态代码,或者能够发现请求是否超时,就会非常有帮助。

当前进展:

据我所知,没有办法直接检查表单提交的实际结果,我认为你也无法从onunload事件中获得下一个请求的状态。

我们准备对其进行重组,转而使用AJAX进行POST,但我认为我们无法在其他端点的域中实现这一点。我还想知道我们是否可以将另一个页面加载到一个框架中,并以某种方式获得一些信息,但我知道它也有自己的一组跨域限制。

最后,我们可以尝试先在服务器端进行POST并对此进行分析,但我们访问的服务器很可能位于仅对客户端本地可用的网络上,因此这可能是不可行的,此外还有重放等方面的各种问题。

任何想法或解决方案都将非常有用!

对于测试,浏览器的内置调试如何?Chrome可以让你看到所有的网络请求,包括标题(在这里描述),Firebug也有类似的功能。

如果你说的不仅仅是在测试期间知道结果,而是从用户那里获得POST成功状态,那么我认为跨域限制太强了,除非:

  • 第三方服务提供了某种可以通过JSONP访问的"成功了吗"URL
  • 第三方服务被配置为允许使用CORS(MDN-docs)进行跨站点AJAX

以下是AJAX请求的基本示例:

var xmlhttp;
if (window.XMLHttpRequest)
    xmlhttp=new XMLHttpRequest();
else
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

请注意带有xmlhttp.status == 200的行。您应该能够检查这个变量以查看AJAX调用返回的状态。所以你可以这样做:

var xmlhttp;
if (window.XMLHttpRequest)
    xmlhttp=new XMLHttpRequest();
else
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange=function()
{
    console.log("STATUS = "+ xmlhttp.status);
}
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

这就是你要找的吗?