【发布时间】:2011-09-16 23:50:19
【问题描述】:
我有一个 Web 应用程序,我在页面上显示用户 cmets 及其发布时间。由于有定期发布的 cmets,所以我需要每 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;
}
但这里我的问题是每 1 分钟执行此 web 方法后,整个网页都会挂起,直到 ajax 调用完成。我想在不占用页面的情况下刷新时间。
【问题讨论】:
-
请格式化您的代码。如果他看不懂代码,没有人可以帮助你......
-
错误 #1,使用
setInterval来(重新)触发 ajax 请求。它必然会产生问题。最坏的情况:自我强加的 DDOS。改用setTimeout并在ajax 请求完成后创建一个新计时器。 -
错误 #2,使用
async: false。你做错了,从 ajax 中删除 a 是矛盾的。 -
感谢您的回复,我如何使用 setTimeout ,因为我需要在每 1 分钟后调用该方法??