javascript - ajax 成功后刷新/重新加载页面但防止页面闪烁
问题描述
如标题所示,我的网站遇到了一些问题,
我使用ajax来读取我的 API,在 ajax 成功后,我需要重新加载页面以显示一些数据,
不幸的是,页面有时会闪烁然后重新加载,但有时不会。
我使用 setTimeout 来实现这一点,因为我正在写购物车页面,
它允许用户编辑他们购物车的商品。
我的想法是:用户停止点击加号或减号按钮或停止输入数量约 1 秒后,
ajax 将执行以读取我的 API,在 ajax 成功后,重新加载页面。
那么,有没有什么办法可以防止页面闪烁呢?
或者也许我可以制作一个加载 gif 以显示在页面上?
我的代码将是:
var timeout = null;
$('.num').on('keyup', function() {
var newNum = $(this).val();
var pid = $(this).attr("name");
clearTimeout(timeout);
timeout = setTimeout(function() {
if(newNum <= 0){
alert("At least 1 product!");
$(this).val("1");
$.ajax({
type: "post",
url: myAPI,
async: false,
data: {
pid: pid,
newNum: 1
},
dataType: "json",
success:function(data){
window.location.reload(true);
},
});
}else {
$.ajax({
type: "post",
url: myAPI,
async: false,
data: {
pid: pid,
newNum: newNum
},
dataType:"json",
success:function(data){
window.location.reload(true);
},
});
}
}, 1000)
});
解决方案
ajax
当您想重新加载页面以显示更新的数据时,使用它有什么意义......?
success:function(data){
window.location.reload(true);
}
上面这段代码有什么用..?
出于您的目的,一件简单form submission
的事情就足够了,但是您已经使用ajax
了获取数据但没有在任何地方使用它。
如果您想重新加载页面,那么最好使用 Şahin Ersever 的解决方案。
如果您想要一个动态站点,在后台从后端获取数据并在前端更新而不刷新页面,请执行以下操作。
<html>
<body>
<h1> Dynamic load using AJAX </h1>
<div class="dynamic_div">
<div class="some_class">
<!-- here some more elements may/may not contain dynamic data or some server side based-->
<!-- Like this -->
<h1> Name:- <?php echo $name;?> </h1>
<p> <?php echo $some_other_variable;?> </p>
<p> <?php echo $some_other_variable;?> </p>
....
</div>
</div>
<button onclick="letsload()">Load</button>
<script>
function letsload(){
$.post("someurl",{ data1: "value1", data2 : "value2"},
function(data, status){
if(status == "success"){
$('.dynamic_div').html(data);//Loading updated data
}
});
}
</script>
</body>
</html>
在data
变量上,您可以回显所需的 html/json 或成功/错误代码,并相应地处理 ajax 函数中的数据/代码。
编辑 :-
看着你的评论But I check my website, if ajax success, I use console.log to print my data, it's not working, but if reload page, it can work
。
我有一个快速简便的解决方案。
让我们以我给出的上面的例子为例。
假设如果我想在dynamic_div
我将要执行的操作中显示更新的数据,我是否将要在该 div 中显示的元素保留在单独的文件中。
例如:-updated.php
<div class="some_class">
<!-- here some more elements may/may not contain dynamic data or some server side based-->
<!-- Like this -->
<h1> Name:- <?php echo $name;?> </h1>
<p> <?php echo $some_other_variable;?> </p>
<p> <?php echo $some_other_variable;?> </p>
....
</div>
现在我要做的是我的 ajax 的成功,我会.dynamic_div
像这样加载这个 div。
success:function(data){
$('.dynamic_div').load("updated.php");//Load the inside elements into div
}
现在您将获得更新的数据,因为您已经在后端的某个地方对其进行了更新,因此load()
将在一个部门内加载一个页面,而无需刷新整个页面。
评论任何查询。
推荐阅读
- python - 合并数据框中的相同列
- ssl - 让我们与 Jitsi Meet 一起为站点加密证书
- flutter - 如何创建自定义 TextField 类?
- c# - 在 C# 和 VB.net 中使用实体框架有什么区别吗?
- reactjs - 如何在 Windows 服务器中部署 laravel
- vba - 访问vba如何将代码运行到整个表
- python - 实际如何生成,用pygame在游戏开始时在随机位置绘制几堵墙(10-15)
- handsontable - Handsontable 中动态编辑的单元格值为空
- javascript - 如何切换多个属性
- google-sheets - 数组公式中的动态范围而不使用间接?