显示 Ajax 调用进度的最佳方式是什么?

2024-03-06

我有一个 Ajax 调用,它更新数据库中的 5,000 条记录,因此这需要很多时间。我有一个 Ajax“正在加载图像”显示正在发生某些事情,但我正在寻找更好的方法来显示“更新 5000 个中的 50 个......”、“更新 5000 个中的 200 个”或类似的内容。

在 Ajax / jQuery 中做这样的事情而不做 5000 个不同的帖子的最佳方法是什么?


我认为最好的是使用Comet http://en.wikipedia.org/wiki/Comet_%28programming%29.

在Comet风格的应用程序中,服务器本质上可以将数据推送到客户端(而不是客户端一次又一次地向服务器请求数据)。客户端只需要连接到服务器once。然后服务器会不断将数据推送回客户端。

来自维基百科:

Comet 是一种编程技术,使 Web 服务器能够将数据发送到客户端,而不需要客户端请求它。它允许创建托管在浏览器中的事件驱动的 Web 应用程序。

现在让我们看看 Comet 是如何工作的。请参阅以下服务器端代码。这里有一个while正在使用循环,您可以设置自己的条件。在 while 循环中,页面写入日期时间并刷新,然后休眠 1/2 秒。

ASP.NET 页面代码隐藏:Service.aspx.cs

public static string Delimiter = "|";

protected void Page_Load(object sender, EventArgs e)
{
    Response.Buffer = false;

    while (true)
    {
        Response.Write(Delimiter
            + DateTime.Now.ToString("HH:mm:ss.FFF"));
        Response.Flush();

        // Suspend the thread for 1/2 a second
        System.Threading.Thread.Sleep(500);
    }

    // Yes I know we'll never get here,
    // it's just hard not to include it!
    Response.End();
}

客户端代码 - 纯 JavaScript

只发出一次请求,然后不断检查里面的数据readyState === 3 of XMLHttpRequest.

function getData()
{
    loadXMLDoc("Service.aspx");
}

var req = false;
function createRequest() {
    req = new XMLHttpRequest(); // http://msdn.microsoft.com/en-us/library/ms535874%28v=vs.85%29.aspx
}

function loadXMLDoc(url) {
    try {
        if (req) { req.abort(); req = false; }

        createRequest();

        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send("");
        }
        else { alert('unable to create request'); }
    }
    catch (e) { alert(e.message); }
}

function processReqChange() {
    if (req.readyState == 3) {
        try {
            ProcessInput(req.responseText);

            // At some (artibrary) length   recycle the connection
            if (req.responseText.length > 3000) { lastDelimiterPosition = -1; getData(); }
        }
        catch (e) { alert(e.message); }
    }
}

var lastDelimiterPosition = -1;
function ProcessInput(input) {
    // Make a copy of the input
    var text = input;

    // Search for the last instance of the delimiter
    var nextDelimiter = text.indexOf('|', lastDelimiterPosition + 1);
    if (nextDelimiter != -1) {

        // Pull out the latest message
        var timeStamp = text.substring(nextDelimiter + 1);
        if (timeStamp.length > 0) {
            lastDelimiterPosition = nextDelimiter;
            document.getElementById('outputZone').innerHTML = timeStamp;
        }
    }
}

window.onload = function () { getData(); };

参考 http://www.aaronlerch.com/blog/2007/07/08/creating-comet-applications-with-aspnet/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示 Ajax 调用进度的最佳方式是什么? 的相关文章

  • 如何重命名 jsTree 节点

    我不是在谈论 demo1 jstree rename node 这使得用户可以编辑节点 我说的是代码中名称的更改 例如 我的节点都以 2 位数字 01 为前缀 所以在我调用之前 demo1 jstree rename node 我想删除前缀
  • 修改某个类的所有html

    我有这个 p class comment date title a c p p class comment date title b b p 我想将标题放在任何元素的 html 中 所以我尝试这样做 comment date html co
  • 如何从 javascript 有效地访问 gzipped xml?

    我需要从 javascript 实际上是从 Greasemonkey 有效地访问一个大的 gzipped xml 文件 不幸的是 服务器不提供 Content Encoding 标头 并且 Content Type 是 applicatio
  • 单击按钮时,如何将数字存储在 html 表单输入中作为 javascript 变量? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 基本上我想做的是 当用户在 HTML 表单输入字段中输入一个数字 然后按下提交按钮时 该数字将存储在 JavaScript 变量中
  • 等待多个异步调用完成后再继续

    因此 我有一个加载页面 并通过 jquery get 发出多个请求以使用其值填充下拉列表 function LoadCategories Category LoadPositions Position LoadDepartments Dep
  • 使用Rails UJS,如何从函数提交远程表单

    我正在使用Rails UJS 我有一个表单设置来进行远程提交 如下所示
  • 在 setTimeout 中传递 $(this)

    如何将 this 作为 setTimeout 函数 方法 中的参数传递 这是我到目前为止正在做的事情 它正在发挥作用 var Variables Variables ResizeTimer false Variables obj null
  • 如果未选中复选框,jquery 清除输入字段

    我有以下 jquery 如果选中复选框 用户可以填写表单中的其他字段 我想要的是如果未选中该复选框 则清除附加输入字段值 document ready function input checkbox attr checked false x
  • jquery ajax可以调用外部webservice吗?

    jquery ajax代码可以调用吗网络服务来自另一个域名或另一个网站 像这样 ajax type POST url http AnotherWebSite com WebService asmx HelloWorld data name
  • jQuery .append 不起作用

    我想在我的表单中插入一些东西 这些东西被硬编码到插件中 我不想弄乱插件文件 所以我发现 append 我写过类似的东西 据我所知它应该有效 Chrome 中的控制台没有显示任何错误 这是有什么问题吗 由于 wordpress 安全模式 我正
  • 如何在 jquery 中使 ajax 数据键动态化?

    我试图使内联编辑成为动态的 因此它只依赖于我的标记中的一些数据属性 所以现在的代码如下 inline edit editable function value settings var editableField this ajax typ
  • 如何获取传单标记簇中点击事件的图块?

    这是我的代码 function onMapClick e e originalEvent defaultPrevented true var orig e originalEvent console log orig target map
  • 如何在 Flex/Actionscript 中动态填充进度条?

    我想创建一个进度条 其中的 根据某些变量用不同的颜色填充 例如 33 会用不同的颜色填充进度条的 33 然后 40 会同样填充进度条的 40 在 Actionscript 和 Flex 3 中执行此操作的最佳方法是什么 我过去这样做的方法是
  • 使用 jquery 通配符检查 cookie 名称

    我有一个生成动态 cookie 的表单 例如 webform 62 1234356 62 1234356 可以是任意数字 我需要使用一些通配符检查来检查名称以 webform 开头的 cookie 是否存在 下面不起作用 if cookie
  • 使用 jQuery UI 日期选择器选择日历更改 URL

    我正在使用 jQuery UI 选择器 我想知道当有人选择日期时是否有可能 它会自动将他们重定向到 URL 如下所示 index php date 2013 10 15 这是我正在使用的插件 Date
  • 限制 jQuery id 字符串吗?

    简而言之 我的问题是字符串在 jQuery 中作为可搜索 id 或可搜索内容有什么限制 更新 我得到了 ID 部分 但不是为什么我什至无法使用该字符串搜索 html 内容 对于任何愿意告诉我一个正则表达式来将模式从 MM dd yy HH
  • 为什么 JSON 结果可以是布尔值而不是对象或数组?

    From JSON 网站 http json org JSON 建立在两种结构之上 名称 值对的集合 在各种语言中 这被实现为对象 记录 结构 字典 哈希表 键控列表或关联数组 值的有序列表 在大多数语言中 这被实现为数组 向量 列表或序列
  • Jquery 两个字段的时间差(以小时为单位)

    我的表单中有两个字段 用户可以在其中选择输入时间 start time end time 我想在更改这些字段时重新计算另一个字段的值 我想做的是获取两次之间的小时数 例如 如果我的开始时间为 5 30 结束时间为 7 50 我想将结果 2
  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p
  • jqGrid刷新本地数据(JSON对象)

    我正在尝试将 jqGrid 与本地数据一起使用 但发现了几个问题 我正在初始化这样的事情 function refreshGrid grid results grid jqGrid data results datatype local c

随机推荐