0

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

对于调试,如果我们能查明这个自动 POST 是否成功,那将是非常有用的。有人对我们如何做到这一点有任何想法吗?仅仅能够获取 HTTP 状态代码,或者能够找出请求是否超时,将非常有帮助。

目前的进展:

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

我们已准备好对其进行重组,改为使用 AJAX 进行 POST,但我认为我们无法针对其他端点的域进行这项工作。我也想知道我们是否可以在一个框架中加载另一个页面并以某种方式获取一些信息,但我知道它也有自己的一组跨域限制。

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

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

4

2 回答 2

0

这是 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();

那是你要找的吗?

于 2012-08-24T12:36:38.480 回答
0

对于测试,浏览器的内置调试怎么样?Chrome 可让您查看所有 Web 请求,包括标头(在此处描述),而 Firebug 也有类似的东西。

如果您不仅要在测试期间了解结果,而且要从用户那里获取 POST 成功状态,那么我认为跨域限制太强了,除非:

  • 第三方服务提供了某种“是否有效”的 URL,您可以使用 JSONP 访问
  • 第三方服务配置为允许使用 CORS 的跨站点 AJAX(MDN 文档
于 2012-08-24T12:52:39.787 回答