使用jquery ajax刷新页面

时间:2011-06-17 07:51:25

标签: jquery asp.net ajax

我有一个网络应用程序,我在页面上显示用户评论及其发布时间。由于有定期发布的评论,所以我需要每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 &gt; 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 = &quot;&quot;;
       if (comments.LoadByPrimaryKey(Convert.ToInt32(id)))
           time = MyClass.GetTime(comments.CommentsDate);
       if (!(time.ToLower().Contains(&quot;sec&quot;) || time.ToLower().Contains(&quot;min&quot;)))
           time = &quot;&quot;;
       return time;
   } 

但是我的问题是在执行此Web方法后每1分钟一次,整个网页被挂起,直到ajax调用完成。我想刷新时间而不用总线页面。

3 个答案:

答案 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调用。

这肯定会阻止页面运行(甚至不能点击鼠标)