使用javascript多次提交表单来下载多个文件?

发布于 2024-11-04 03:57:56 字数 965 浏览 0 评论 0原文

大家好,情况是这样的:

我有一个 URL,它接受两个参数并返回一个 PDF 文件。我还可以将包含两个输入值的表单发布到此 URL。

在另一个页面上,我想触发一个 javascript,它将通过 GET 或 POST 向 URL 发送不同的参数组合,并返回与参数组合关联的每个文件。

基于我在这里找到的另一个脚本,我对其进行了调整并尝试了这个(URL 匿名):

var first = '503113571';
var second = '2046486463';
var url = 'https://www.domain.com/page';

el = document.createElement( 'div' );
el.setAttribute( "id", "targetdiv" );
document.body.appendChild( el );

function download(first, second)
{
    var htm = '<iframe src="' + url + '?a=' + first + '&b=' + second + '"></iframe>';
    document.getElementById('targetdiv').innerHTML = htm;
}

download(first, second);

iframe 是在 div 中创建的,并且它的 src 属性是正确的 - 如果我将 src 属性复制并粘贴到一个新窗口中,该文件下载很好。由于某种原因,当在 iframe 中使用此 URL 时,该文件永远不会加载。

我使用 GreaseMonkey 在页面上运行脚本,因为我们无权更改实际的网页本身。该脚本运行良好(当所有代码运行时,正确创建 iframe)。

使用 FireBug 的 NET 面板,页面加载后,我没有看到任何对 iframe src 的请求。

有什么想法,无论是关于原因,还是我可以采取哪些步骤来解决这个问题?谢谢!

Hey Folks, here's the situation:

I have a URL that takes two parameters and returns a PDF file. I can also post a form with two input values to this URL instead.

On another page, I want to trigger a javascript that will send different combinations of parameters to the URL, either by GET or POST, and return each of the files associated with the parameter combinations.

Based on another script I found here, I adapted it and tried this (URL anonymized):

var first = '503113571';
var second = '2046486463';
var url = 'https://www.domain.com/page';

el = document.createElement( 'div' );
el.setAttribute( "id", "targetdiv" );
document.body.appendChild( el );

function download(first, second)
{
    var htm = '<iframe src="' + url + '?a=' + first + '&b=' + second + '"></iframe>';
    document.getElementById('targetdiv').innerHTML = htm;
}

download(first, second);

The iframe is created in the div, and its src attribute is correct--if I copy and paste the src attribute into a fresh window, the file downloads fine. For some reason, when this URL is used in the iframe, the file is never loaded.

I am using GreaseMonkey to run the script on the page, as we don't have access to change the actual web pages themselves. The script runs fine (as all of the code runs, creating the iframe correctly).

Using FireBug's NET panel, after the page loads, I don't see any request to the iframe src.

Any ideas, either on the cause, or what steps I could take to figure it out? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱本泡沫多脆弱 2024-11-11 03:57:56

有几点:

  1. 您只能以这种方式执行 GET 请求,并且不能使用传递到下载函数中的参数。
  2. 我通常将代码粘贴到 Firebug 控制台中来测试某些内容。
  3. 您应该只需设置window.location即可下载文件。

    var 首先 = '503113571';
    var 第二个 = '2046486463';
    var url = 'https://www.domain.com/page';
    
    函数下载(a,b){
        window.location = url + '?a=' + a + '&b=' + b;
    }
    
    下载(第一,第二);
    
  4. 如果您想使用iframe,这应该可以正常工作,而不会存在转到其他页面的风险:

    函数下载(a, b) {
        var newIFrame = document.createElement("iframe");
        newIFrame.src = url + '?a=' + a + '&b=' + b;
        newIFrame.style.display = '无';
        document.body.appendChild(newIFrame);
    }
    

A few things:

  1. You can only do a GET request that way, and you're not using the arguments you passed into the download function.
  2. I usually paste code into the Firebug console to test something out.
  3. You should be able to just set window.location to download a file.

    var first = '503113571';
    var second = '2046486463';
    var url = 'https://www.domain.com/page';
    
    function download(a, b) {
        window.location = url + '?a=' + a + '&b=' + b;
    }
    
    download(first, second);
    
  4. If you wanted to use an iframe, this should work without the risk of going to a different page:

    function download(a, b) {
        var newIFrame = document.createElement("iframe");
        newIFrame.src = url + '?a=' + a + '&b=' + b;
        newIFrame.style.display = 'none';
        document.body.appendChild(newIFrame);
    }
    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文