如果Ajax成功后在预定时间内,jQuery刷新/重新加载页面

21
我使用jQuery发起一个Ajax请求。服务器返回JSON对象,其中的值是"true或false",格式如下:
return Json(new { success = false, JsonRequestBehavior.AllowGet });

如果服务器返回true,是否有办法在5秒后刷新页面?

8个回答

57

在您的ajax成功回调函数中执行以下操作:

success: function(data){
   if(data.success == true){ // if true (1)
      setTimeout(function(){// wait for 5 secs(2)
           location.reload(); // then reload the page.(3)
      }, 5000); 
   }
}

如果你想在5秒后重新加载页面,那么你需要像答案中建议的那样设置一个超时。


5000 是什么意思? - Bala Karthik
2
@BalaKarthik 这是以毫秒为单位的时间,相当于5秒钟。 - Jai
2
5000 表示 5000 毫秒(1 秒 = 1000 毫秒) - Anh Hoang

17
location.reload();

当条件成功时,您可以在if语句中使用reload函数来重新加载页面。


重新加载页面是个好主意,但这里的重点在于setTimeout函数 :) - Anh Hoang

10
if(success == true)
{
  //For wait 5 seconds
  setTimeout(function() 
  {
    location.reload();  //Refresh page
  }, 5000);
}

4

我更喜欢这种方式 使用ajaxStop + setInterval,这将在同一页内的任何XHR[ajax]请求之后刷新页面。

    $(document).ajaxStop(function() {
        setInterval(function() {
            location.reload();
        }, 3000);
    });

它在我这里可以工作,但会一直循环重新加载。 是否有办法只在 Ajax 值改变时使其工作? - Said Erraoudy
1
@SaidErraoudy,你可以使用if语句来检查值是否已更改。 - A. El-zahaby
类似这样的内容:https://jsfiddle.net/wLyoqrme/1/ - Said Erraoudy
1
@SaidErraoudy 创建一个全局标志变量,并在从服务器获取结果时设置其值。然后将当前结果与其进行比较。 - Anh Hoang

2
var val = $.parseJSON(data);
if(val.success == true)
{
 setTimeout(function(){ location.reload(); }, 5000);

}

1
$.ajax("youurl", function(data){
    if (data.success == true)
    setTimeout(function(){window.location = window.location}, 5000); 
    })
)

1

只需使用

    $.ajax({
        success: function (response) {
            location.reload();
            },
        error : function(xhr,errmsg,err) {
        console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console
    }
    });

1

这里有很多好的答案,只是出于好奇今天研究了一下,难道不是最好使用setInterval而不是setTimeout吗?

setInterval(function() {
location.reload();
}, 30000);

让我知道你的想法。


setTimeout函数仅被调用一次,而setInterval将被调用多次。你知道哪一个在这种情况下更合适、更好。 - Anh Hoang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接