【问题标题】:refresh page using jquery ajax使用 jquery ajax 刷新页面
【发布时间】: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 &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;
   } 

但这里我的问题是每 1 分钟执行此 web 方法后,整个网页都会挂起,直到 ajax 调用完成。我想在不占用页面的情况下刷新时间。

【问题讨论】:

  • 请格式化您的代码。如果他看不懂代码,没有人可以帮助你......
  • 错误 #1,使用setInterval 来(重新)触发 ajax 请求。它必然会产生问题。最坏的情况:自我强加的 DDOS。改用setTimeout 并在ajax 请求完成后创建一个新计时器。
  • 错误 #2,使用async: false。你做错了,从 ajax 中删除 a 是矛盾的。
  • 感谢您的回复,我如何使用 setTimeout ,因为我需要在每 1 分钟后调用该方法??

标签: jquery asp.net ajax


【解决方案1】:

当你使用带有

的 jquery ajax 函数时
async: false,

页面将保持忙碌状态,直到请求结束。

【讨论】:

    【解决方案2】:

    去掉这个:async: false(默认为true)

    除非在极少数情况下您必须等待,否则不应同步进行 ajax 调用。

    这肯定会锁定页面无法运行(甚至无法单击鼠标)

    【讨论】:

      【解决方案3】:

      这可能是内存问题 + 更改 ajax 异步调用中的设置。

      来自

      异步:假

      异步:真

      当您说async: false 时,这意味着您不允许浏览器以与 AJAX 完全相反的异步方式发送您的请求 - 它应该是一个异步调用。

      在此处查看文档:

      async 默认值:true 默认情况下,所有 请求是异步发送的(即 默认情况下设置为 true)。如果 你需要同步请求,设置 此选项为假。跨域 请求和数据类型:“jsonp” 请求不支持同步 手术。注意同步 请求可能会暂时锁定 浏览器,禁用任何操作,同时 请求处于活动状态。

      建议:

      我认为您正在尝试加载 all comments,如果您的结果集很高,以便浏览器保留数据并将其发布到元素上,这可能会占用大量内存。

      我建议您只从服务器请求新数据,而不是整个“不在 cmets 面板上”,这样您就不会在浏览器中窃听以将所有内容保存在内存中。

      【讨论】:

      • 感谢您的回复,不,我没有获取全部数据,我只是获取日期并将其计算为自发布此评论以来经过的时间,我在使用 async: true 时发现了另一个问题;该 id 将我的周界“id”更改为其他值,例如当我通过 5 时,它在 webmethod 中的某个时候为 0。
      • @tanweer 这只是一个建议。我怀疑它会影响,只要$('#hdID').val(); 没有更改值,它总是正确的。提醒这个值并确认它。
      猜你喜欢
      • 2011-01-02
      • 2013-08-10
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多