按下按钮后调用网址的正确方法

时间:2019-06-20 18:43:43

标签: javascript jquery html

因此,我编写了一个Java servlet从服务器获取一个zip文件,当我使用Web浏览器对其进行测试时,该文件运行良好。

我的URL如下所示:

https://myserver.com/Download/FileServlet?filename=users_files_3a2f51a4-9381-11e9-bc42-526af7764f64.zip&user=TAN

这将成功下载文件。

我将动态传递文件名的UUID部分(将从数据库表(最顶部)记录中获取)和user变量,但是暂时并进行测试,我已经硬编码了这些变量。

我想知道当用户单击按钮时如何调用上述URL。我当前的设置(没有任何URL)如下。

我在HTML代码中按下了按钮,如下所示:

<button id="fileButton" onclick="checkFile()">Download Files</button>

<script>
function checkFile(){

}

</script>

是否遵循正确的方法?

<button id="fileButton" onclick="checkFile(); location.href= https://myserver.com/Download/FileServlet?filename=users_files_3a2f51a4-9381-11e9-bc42-526af7764f64.zip&user=TAN ">Download Files</button>

因此,即使上述方法是正确的,一旦用户点击下载按钮,文件很可能也无法下载。

我可能不得不一次又一次地运行上面的URL(如果我将URL与按钮单击绑定在一起,在这种情况下可能无法实现),也许使用javascript的setInterval()方法在函数内部做

2 个答案:

答案 0 :(得分:0)

如果要以编程方式调用/打开URL,可以尝试以下操作:

<script type="text/javascript">
    function populate(s1,s2) {
        var s1 = document.getElementByID(slct1);
        var s2 = document.getElementByID(slct2);
        s2.innerHTML = "";

        if(s1.value == "Email"){
        var optionArray = ["Cannot Login|Cannot Login", "Cannot Sent Email|Cannot Sent Email"];

        }
            for(var option in optionArray){
            var pair = optionArray[option].split("|");
            var newOption = document.createElement("option");
            newOption.value = pair[0];
            newOption.innerHTML = pair [1];
            s2.options.add(newOption);
            }
}

</script>
</head>
<select id="slct1" name="slct1" onchange="populate('slct1','slct2')">
    <option value=""></option>
    <option value="Email">Email</option>
    <option value="Print">Print</option>
    <option value="Internet">Internet</option>
</select>
<hr />
Select your issue:
<select id="slct2" name="slct2"></select>

将在新标签页中打开一个网址。

答案 1 :(得分:-1)

为@DonJoe的答案添加一些见解 如果文件已准备就绪,则对下载位置的ajax调用将给响应头200,然后方便下载。也许您下载了两次。

var url = 'https://myserver.com/Download/FileServlet?filename=users_files_3a2f51a4-9381-11e9-bc42-526af7764f64.zip&user=TAN'
function checkFile(){
    $.ajax({
        url: url,
        success: function (data) {
            window.open(url,'_blank');
            #or window.location.href = url

        },
        error: function () {
            setTimeout(3000, checkFile)
        }
    });
}

或可能制作一个iframe

<iframe class='downloader' />

#js
var url = 'http://myserver.com/...'
checkFile = function() {
  $('.downloader').attr('src', url)
  setTimeout(3000, checkDownload)
}
var checkDownload = function() {
  if($('.downloader')[0].innerHTML.indexOf('400') > 0)
    checkFile()
}

这将重复检查iframe内容,假设文件未准备好下载时出现400响应。