[英]after ajax success refresh / reload page but prevent page blink
如標題所示,我的網站遇到了一些問題,
我使用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)
});
您可以根據需要添加加載器 gif,然后在加載文檔時刪除。
<div class="loader-fix" style="position:fixed;height:100vh;width:100vw;background:#ffffff;">
<img src="your.gif" />
</div>
<script>
$(window).on('load', function (e) {
$('.loader-fix').fadeOut('slow', function () {
$(this).remove();
});
});
</script>
當您想重新加載頁面以顯示更新的數據時,使用ajax
有什么意義...?
success:function(data){
window.location.reload(true);
}
上面這段代碼有什么用..?
對於您的目的,一個簡單的form submission
就足夠了,但是您已經使用ajax
獲取數據但沒有在任何地方使用它。
如果您想重新加載頁面,那么最好使用 Şahin Ersever 的解決方案 go。
如果你想要一個動態站點,在后台從后端獲取數據並在不刷新頁面的情況下在前端更新數據,請執行以下操作。
<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 function 中的數據/代碼。
編輯:-
查看您的評論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 成功后,我將像這樣將這個 div 加載到我的.dynamic_div
中。
success:function(data){
$('.dynamic_div').load("updated.php");//Load the inside elements into div
}
現在你將獲得更新的數據,因為你已經在后端的某個地方更新了它,所以load()
將在一個分區內加載一個頁面,而不刷新整個頁面。
對任何疑問發表評論。
如果您想重新加載頁面,則不要使用 ajax 調用,但如果您想使用 ajax 加載數據,則在 ajax 成功消息中使用 JavaScript 更新您的 html。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.