我有一个网络应用程序,我在页面上显示用户评论及其发布时间。由于有定期发布的评论,所以我需要每1分钟后更新评论发布时间。为此我使用jquery ajax来更新db的时间。我的代码是这样的:
<script type="text/javascript">
setInterval("UpdateTime()", 60000);
function UpdateTime() {
var id=$('#hdID').val();
$.ajax({
type: "POST",
url: "mypage.aspx/UpdateTime",
data: "{'id':'" + id + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
if (msg.d.length > 0) {
obj = document.getElementById('feed_TimeStamp' + id);
obj.innerHTML = msg.d;
//$(obj).slideDown("slow");
}
},
async: false,
error: function(xhr, status, error) {
//alert(xhr.statusText);
}
});
}
</script>
cs文件:
[WebMethod]
public static string UpdateTime(string id)
{
Comments comments = new Comments();
string time = "";
if (comments.LoadByPrimaryKey(Convert.ToInt32(id)))
time = MyClass.GetTime(comments.CommentsDate);
if (!(time.ToLower().Contains("sec") || time.ToLower().Contains("min")))
time = "";
return time;
}
但是我的问题是在执行此Web方法后每1分钟一次,整个网页被挂起,直到ajax调用完成。我想刷新时间而不用总线页面。
答案 0 :(得分:3)
这可能是内存问题+更改ajax调用异步中的设置。
这
async:false
到
async:true
当你说async: false
,这意味着你是不是让浏览器发送异步方式是完全相反AJAX你的要求 - 它应该是一个异步调用
请参阅此处的文档:
async默认值:true默认情况下,全部 请求是异步发送的(即 默认设置为true)。如果 你需要同步请求,设置 这个选项为false。跨域 requests和dataType:“jsonp” 请求不支持同步 操作。注意同步 请求可以暂时锁定 浏览器,禁用任何操作 请求已激活。
<强>建议:强>
我觉得你要加载all comments
这可能是在内存很多,如果您的结果集为高的浏览器,以保持数据和张贴的元素。
我建议你从服务器,而不是整个“这是不评论面板上的”只请求新的数据,你是不是窃听器保留在内存中的所有的方式。
答案 1 :(得分:1)
当您使用带有
的jquery ajax函数时async: false,
页面将保持忙碌直到请求结束。
答案 2 :(得分:0)
把它拿出来:async:false(默认情况下是真的)
除非极少数情况下必须等待,否则不应同步进行ajax调用。
这肯定会阻止页面运行(甚至不能点击鼠标)