使用javascript获取一个变化的url

使用javascript获取一个变化的url,javascript,jsp,microstrategy,Javascript,Jsp,Microstrategy,我有以下问题: 我目前正在使用softwareMicroStrategy,BI wich具有将报告导出为pdf的功能,其工作原理如下: 每个报表都有一个唯一的ID,因此您可以选择要导出的报表,并使用jsp将该报表的ID发送到导出工具,它生成一个完整的URL,其中包含一些参数,MicroStrategy服务器将读取这些参数以生成PDF 我正在尝试的是捕获这个pdf url并将其发送到一个Java方法,该方法将把这个pdf保存在硬盘中,而不向用户提示任何内容 我的问题是,这个URL不会立即生成,它需

我有以下问题:

我目前正在使用softwareMicroStrategy,BI wich具有将报告导出为pdf的功能,其工作原理如下:

每个报表都有一个唯一的ID,因此您可以选择要导出的报表,并使用jsp将该报表的ID发送到导出工具,它生成一个完整的URL,其中包含一些参数,MicroStrategy服务器将读取这些参数以生成PDF

我正在尝试的是捕获这个pdf url并将其发送到一个Java方法,该方法将把这个pdf保存在硬盘中,而不向用户提示任何内容

我的问题是,这个URL不会立即生成,它需要一段时间,并且在这个过程中会进行一些重定向

那么,在所有这些闲聊之后,我如何才能捕获那个该死的URL

我正在做的是将pdf加载到一个iframe中,然后用我在搜索中找到的js代码提取url,将其分配给一个JSP变量,然后,一旦得到pdf url,调用Java方法。但它不起作用

JavaScript函数如下所示:

<script language="text/javascript">
    function getSrc()
    {
        var CurrentUrl = document.getElementById('miframe').contentWindow.location.href;
        if(currentUrl.substr(length-5)==".pdf")
        {
           return currentUrl;
        }
        else
        {
           setTimeout(getSrc(),5000);
        }
    }
</script>
这就是我对它的呼吁:

<% jsp code
    String currentUrl="<script>document.writeln(getSrc();)</script>";
more jsp code %>
代码的其余部分实际上很好,使用普通的pdf URL进行了尝试,并将pdf保存到磁盘中


希望它是可以理解的,并提前感谢

您的主要问题是您正在调用getSrc,而不是将其传递给setTimeout。实际上,您正在将null传递给setTimeout,除非对getSrc的第二次调用碰巧起作用,在这种情况下,您传递的是字符串,setTimeout由于语法错误而无法处理该字符串

而是使用setTimeoutgetSrc,5000;-getSrc后面没有括号。这将传递函数,而不是其结果


另外,currentUrl.substrlength-5是错误的,部分原因是长度未定义,您需要currentUrl.length,部分原因是您需要-4才能获取最后四个字符。

我不知道您必须以何种方式访问MicroStrategy,但是有一个microstrategyjavaapi,它允许您在不捕获url的情况下执行文档并获取pdf。
查看他们的知识库以获取示例。

为什么不将报告/文档以PDF格式保存为默认格式,这样当您打开报告时,它将自动以PDF格式生成

例如,如果您不喜欢将报表保存为PDF格式,因为您还需要将其作为常规报表,并且不希望维护同一对象的两个版本,则可以使用URLAPI使用&executionMode=3和¤tViewMedia=32生成PDF


对这些参数不太确定,要想知道它们在某些微策略TN旁边,最好的方法是以PDF格式导出报告并检查url。

哇,你指出的错误完全是无误的。不知道为什么我没有更多地关注代码D:我认为您提到的对getSrc的调用就是JSP代码的调用。还是这也错了?“我想不是,但我不确定你是对的,”他补充道,但它从未显示出来。我应该如何将getSrc的返回值分配给jsp字符串?我不知道,我从来没有使用过jsp。我只是在纠正你的JS错误:pWoops,sad face=。不管怎样,谢谢,我本来可以把一切都做好的,反正也不行=