使用 jQuery.data() 丢失数据

发布于 2024-08-12 08:49:31 字数 1911 浏览 8 评论 0原文

我正在开发一个实用程序 Web 应用程序,以帮助操作一些特定于域的 XML 数据。

流程如下:

  1. 加载 XML 文件
  2. 使用浏览器的本机 XML 对象(不是 jQuery!)解析 XML 文件并转换为 JavaScript 对象。
  3. 使用 $(document).data() 存储结果对象
  4. 迭代对象并提取附加信息,将其存储在另一个 $(document).data() 槽中
#4 takes a fair amount of time, so I'm using window.setTimeout() to split the work up into chunks.

这是函数:

function explodeDataStep(index, max) {
    var data = $(document).data('data');
    var lists = $(document).data('lists');
    $debug('explodeDataStep', index, $(document).data('data'), $.data(document));

    var count = 0;
    for (index; index < data.vehicles.length; index++) {
        var vehicle = data.vehicles[index];

        if ($.inArray(vehicle.make, lists.make) < 0) lists.make.push(vehicle.make);
        if ($.grep(lists.model, function(v) { return v.make == vehicle.make && v.model == vehicle.model; }).length == 0) lists.model.push({ make: vehicle.make, model: vehicle.model });
        if ($.inArray(vehicle.module, lists.module) < 0) lists.module.push(vehicle.module);
        if ($.inArray(vehicle.doorlock, lists.doorlock) < 0) lists.doorlock.push(vehicle.doorlock);
        if ($.inArray(vehicle.doorlockCombo, lists.doorlockCombo) < 0) lists.doorlockCombo.push(vehicle.doorlockCombo);
        if ($.inArray(vehicle.tHarness, lists.tHarness) < 0) lists.tHarness.push(vehicle.tHarness);

        count++;
        if (count >= max) {
            index++;
            updateExplodeDataStatus(index);
            window.setTimeout(explodeDataStep, 10, index, max);
            return;
        }
    }
    finishExplodeData();
}

由于某种原因,当索引达到大约 480 时,我注意到 $(document).data('data') 中存储的一些数据就消失了,我一生都无法弄清楚为什么。

因此,这里有一些可能会导致答案的问题:

  • 以这种方式使用 window.setTimeout() 是一个非常糟糕的主意吗?
  • 使用 jQuery.data() 可以存储的数据量是否有限制?我的 XML 文件约为 100KB。

I'm working on a utility web app that to help manipulate some domain-specific XML data.

The flow goes like this:

  1. Load XML file
  2. Parse XML file using the browser's native XML objects (not jQuery!) and convert into JavaScript object.
  3. Store resulting object using $(document).data()
  4. Iterate through object and extract additional information, storing that in another $(document).data() slot

#4 takes a fair amount of time, so I'm using window.setTimeout() to split the work up into chunks.

Here is the function:

function explodeDataStep(index, max) {
    var data = $(document).data('data');
    var lists = $(document).data('lists');
    $debug('explodeDataStep', index, $(document).data('data'), $.data(document));

    var count = 0;
    for (index; index < data.vehicles.length; index++) {
        var vehicle = data.vehicles[index];

        if ($.inArray(vehicle.make, lists.make) < 0) lists.make.push(vehicle.make);
        if ($.grep(lists.model, function(v) { return v.make == vehicle.make && v.model == vehicle.model; }).length == 0) lists.model.push({ make: vehicle.make, model: vehicle.model });
        if ($.inArray(vehicle.module, lists.module) < 0) lists.module.push(vehicle.module);
        if ($.inArray(vehicle.doorlock, lists.doorlock) < 0) lists.doorlock.push(vehicle.doorlock);
        if ($.inArray(vehicle.doorlockCombo, lists.doorlockCombo) < 0) lists.doorlockCombo.push(vehicle.doorlockCombo);
        if ($.inArray(vehicle.tHarness, lists.tHarness) < 0) lists.tHarness.push(vehicle.tHarness);

        count++;
        if (count >= max) {
            index++;
            updateExplodeDataStatus(index);
            window.setTimeout(explodeDataStep, 10, index, max);
            return;
        }
    }
    finishExplodeData();
}

For some reason, when the index gets up to around 480, I'm noticing that some of the data stored in $(document).data('data') just disappears, and I can't for the life of me figure out why.

So, here are some questions that may lead to the answer:

  • Is using window.setTimeout() in this fashion an incredibly bad idea?
  • Are there limits as to how much can be stored using jQuery.data()? My XML file is ~100KB.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

失去的东西太少 2024-08-19 08:49:31

这很尴尬......

我在代码的其他地方使用了 Array.splice() 。这样就可以了。是的。

This is embarrassing...

I was using Array.splice() elsewhere in my code. That'll do it. Yep.

枯叶蝶 2024-08-19 08:49:31

在这种情况下,我不会使用 jQuery,而是将您的信息存储为原生 JavaScript 对象。

In this case I would not use jQuery and instead store your information is native JavaScript objects.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文