Javascript 是否将html设为标记href,等待onclick中的异步函数返回?

Javascript 是否将html设为标记href,等待onclick中的异步函数返回?,javascript,html,asynchronous,Javascript,Html,Asynchronous,我有一个onclick链接,它应该在href之前执行 <a class="btn btn-primary" href="?mode=full" onclick="req('name=vmode&value=full','POST','/cookie')">Promeni rezim prikaza</a> 或者返回false 现在,这只在我设置 Http.open(method,url,false); 但是我的浏览器控制台警告我,在主线程上这样做是不可取的,

我有一个onclick链接,它应该在href之前执行

<a class="btn btn-primary" href="?mode=full" onclick="req('name=vmode&value=full','POST','/cookie')">Promeni rezim prikaza</a>

或者返回false

现在,这只在我设置

Http.open(method,url,false);
但是我的浏览器控制台警告我,在主线程上这样做是不可取的,即使我不调用该部分,它也不允许我的一半脚本正常工作(奇怪)


如何正确地做到这一点?i、 e使其等待异步函数的传递,然后单击函数的事件:
onclick=“req(event,'name=vm…”

然后,您的函数可以执行它,这样就不会执行单击的默认操作

现在等待网络请求返回(可能希望使用,这比旧的
XMLHttpRequest
简单得多)

解决承诺后,触发重定向到目标URL:

<body>
    <a href="?mode=full" onclick="req(event, 'name=vmode&value=full','POST','/cookie')">Promeni rezim prikaza</a>
</body>
<script>
function req(event, data='',method='GET',url='/index.html?test') {
    console.debug(event);
    event.preventDefault();
    fetch(url, {method: "POST"}).then(() => {
        location.href = event.target.href;
    });
}
</script>

函数req(事件,数据='',方法='GET',url='/index.html?测试'){
调试(事件);
event.preventDefault();
获取(url,{method:“POST”})。然后(()=>{
location.href=event.target.href;
});
}
<>但是考虑到你的用户可能不得不在后台等待请求,并且不知道发生了什么。


如果您只想发送一些统计数据,您可能需要考虑使用新的API。它在后台发送数据(<代码> POST <代码> > <强> ASYNC/<强>,以便可以为用户加载链接目标,而浏览器在后台的“代码> SeNeBeAcon())/<代码>上工作。

为什么会出现异步问题?畏缩?也许是因为人们不断问他们,没有人理解async,“啊,那是async”,但即使如此,你是对的,只要我不能轻松找到我需要的搜索方法,就没有愚蠢的问题:“POST“->method:method尚未测试,但答案非常好,信息量非常大,帮助我以更好的方式实现我的目标,不仅解决了我的问题。sendBeacon()这听起来正是我所需要的,因为我要放一个cookie来记住连接到我的页面的那个版本,然后再连接到它,所以请求对页面本身并不重要,但我还在其他地方使用相同的功能来停止连接并打印出缺少某些必需字段的内容。我将添加后台请求st作为一个选项,我对性能很谨慎,我缩小了一切:)
Http.open(method,url,false);
<body>
    <a href="?mode=full" onclick="req(event, 'name=vmode&value=full','POST','/cookie')">Promeni rezim prikaza</a>
</body>
<script>
function req(event, data='',method='GET',url='/index.html?test') {
    console.debug(event);
    event.preventDefault();
    fetch(url, {method: "POST"}).then(() => {
        location.href = event.target.href;
    });
}
</script>