问题描述
我做了一个打印页,从那里打印表格。但是,当您删除某些内容时,您还需要刷新页面才能应用该站点。这是我的代码
<a target="_blank" onclick=" asd()" href="<?= url('/delete?id=' . $row['product_id']) ?>" class="btn success">Delete</a>`
function asd() {
var a = confirm('Are you sure you want to delete this product');
if (a == 1) {
setTimeout(function() {
location.refresh();
},1000);
return 1;
} else {
return 0;
}
}
解决方法
无法找到location.refresh()方法
改为尝试location.reload()
通常,当某些代码不起作用时,请尝试专门隔离不起作用的内容,将来做此事的好方法是改用console.log并查看是否有结果。如果您这样做了,请尝试其他功能。如果没有用,那就是问题
,我非常不喜欢将PHP用于此类事情,但是如果您想使用它,这是我会改变的事情。
您同时触发了onclick和href,但是实际上您想要一个接一个地执行,因为如果不这样做,您将陷入竞争状态。
而且,正如其他人已经指出的那样,没有refresh
方法。使用reload
。
以下是该问题的解决方案:
<a target="_blank" onclick=" asd()" hclass="btn success">Delete</a>
<script>
const url = <?=json_encode(url('/delete?id=' . $row['product_id']))?>;
function asd() {
var a = confirm('Are you sure you want to delete this product');
if (a == 1) {
// Make ajax request in js to make it async and do the refresh AFTER it has succeeded
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
// refresh on success
location.refresh();
}
};
xhttp.open("GET",url,true);
xhttp.send();
return 1;
} else {
return 0;
}
}
</script>
如果您想进一步改善项目,而不仅是对其进行错误修复,请参考以下提示:
- 使函数名称有意义
- 如果愿意,可以将PHP用于后端,但请避免将其与模板代码(HTML,JS,CSS)混合使用
- 重构您的后端以使用正确的REST HTTP函数(DELETE,PUT,PATCH,...)
- 为ajax安装一个库,而不使用标准的JS XMLHttpRequest。尝试使用Axios或jQuery。