javascript - 我正在尝试在 javascript 循环中发送 get 或 post 请求,但 .click() 只处理一次
问题描述
请原谅我对网络编码的无知。我这样做只是为了自动化一项一次性但意义重大的任务。我正在尝试从没有内置功能的在线资源下载许多 pdf。在一个单独的线程上,我了解到我被禁止将下载属性添加到锚点,因为代码不在同一个来源。因此,我在 Chrome 中发现的解决方法可以将 pdf 设置为下载而不是打开。这需要我访问每个 pdf 链接。所以我写了一些 php 来重定向到给定的 url,现在我只需要一种方法来遍历每个 url。我能够获取文件的所有 url 并将它们放入数组或文本文件中。我只是不知道如何遍历每个 url 并在每次加载新的 pdf 时强制 chrome 下载。
我对任何可以完成这项工作的方法持开放态度。我得到的唯一结果是数组中的最后一个 url 被触发,并且之前的所有 url 都被忽略了。
我尝试通过 javascript get 提交表单或向 php 发布请求,将“位置”标头更改为传递的 url。
我试过 window.location.replace(urls[index]);
我已经阅读了有关 javascript 的“关闭”问题,但我发现的解决方案也不能解决这个问题。这是我目前拥有的:
Html/JavaScript 代码:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form type="hidden" id="trigger" action="test.php" method="get"><br></form>
<script>
//create inputs
document.getElementById("trigger").style.display = 'none';
var dummy_input = document.createElement('input');
dummy_input.name = 'url';
dummy_input.type = 'text';
var dummy_input2 = document.createElement('input');
dummy_input2.type = 'submit';
//append to form element
trigger.appendChild(dummy_input);
trigger.appendChild(dummy_input2);
var urls = [
"https://some_url.com/1",
"https://some_url.com/2"
];
for(var i = 0;i < urls.length; i++){
(function(){
var ii = i;
setTimeout(function(){
dummy_input.value = urls[ii];
dummy_input2.click();
},500);
})();
}
</script>
</body>
php代码:
<?php
$url = $_GET["url"];
ob_start();
while (ob_get_status()) { ob_end_clean(); }
header( "Location: $url" );
?>
最终结果应该是我的数组或 txt/csv 文件中的每个 url 都被导航到,导致 chrome 下载文件,然后移动到下一个 url 等等。我尝试过的任何方法都只会触发最后一个 url。(再次抱歉,我不知道如何在这里......但在我来到这里之前我已经研究了好几个小时。)非常感谢任何帮助!
解决方案
你需要传递i
给闭包
var urls = [
"https://some_url.com/1",
"https://some_url.com/2"
];
for (var i = 0; i < urls.length; i++) {
(function(i) {
var ii = i;
setTimeout(function() {
console.log(i)
dummy_input.value = urls[i];
dummy_input2.click();
}, 500);
})(i); // i added here
}
或者,您可以使用let
而不是var
:
var urls = [
"https://some_url.com/1",
"https://some_url.com/2"
];
for (let i = 0; i < urls.length; i++) {
setTimeout(function() {
console.log(i)
dummy_input.value = urls[i];
dummy_input2.click();
}, 500);
}
推荐阅读
- gnu-make - 有没有办法验证给定的目标在makefile中被标记为.PHONY?
- gtk3 - 使用vala单击时如何使gtk按钮执行终端命令
- reactjs - 如何使用 React 显示 Firestore 数据
- asp.net-web-api - Zoom API 无法在发布时创建会议
- midl - “MIDL”任务。多个项目不能传递到“Microsoft.Build.Framework.ITaskItem”类型的参数中
- sql - 在 LIKE 查询中使用多个条件进行搜索
- javascript - 当我在 Discord.js 嵌入中达到 10 个字段时,我将如何发送新嵌入
- python - Python集合问题
- javascript - 在使用 nuxt-link 转到新页面之前存储 url
- javascript - 如何为子元素应用切换