【问题标题】:Javascript ajax callback makes items list flickerJavascript ajax 回调使项目列表闪烁
【发布时间】:2011-09-23 02:04:58
【问题描述】:

我有一个简单的提醒列表,用户可以一次单击并拖动到“删除拖放区”中。它对我的 Webmatrix webservice 进行 ajax 调用以删除该项目。这一切都很好。但是,在 javascript 或 ajax 回调中,我正在检索剩余的项目并将它们显示回列表。出于某种原因,当此过程发生时,列表会闪烁,然后显示新更新的数量。它有点偷走了漂亮的ajax效果。剩下的项目可以向上滑动以填补被拖走的项目留下的空白。任何帮助都会很棒,非常感谢!

这是 jsFiddle 上的代码:(注意:它不是一个“工作”的小提琴示例。只是放置所有代码 sn-ps 的好地方):

http://jsfiddle.net/cpeele00/4ugBt/

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    您获得了闪存,因为您正在清除整个列表然后重新填充它。

    var refreshReminderList = function(data) {
        $('#reminders-list').empty();
        $('#reminders-listTmpl').tmpl(data).appendTo('#reminders-list');
    };
    

    而不是清空它 - 遍历列表并删除任何不在新数据列表中的元素。看起来您返回的是实际的 html,而不是返回一个 id 列表(或一些标识符。

    //pseudocode
    $('reminder-list li').each( function(){
         //if not in data list
         $(this).slideUp();
    });
    

    【讨论】:

    • 感谢您的回复!我之前尝试过没有调用 .empty() ,但它仍然闪烁,但我会尝试你的建议。是的,我正在从 web 服务返回 json,然后使用它来填充 jquery 模板。
    • 我将如何返回 ids 与 html 的列表?我不需要返回那个 html 来重建
    • 项目的列表吗? (对不起,这一切都没什么新意)。谢谢!
  • 我想有两种思考方式。我想最初我假设您只是从列表中删除内容,但看起来可以添加或删除内容。如果您收到一个 id 列表,那么您需要执行两次传递。一通除旧。一次插入新的。对于插入,您需要生成 html 客户端。另一种选择是接收 html,然后用 jQuery 解析它以获取 id。看到这个问题 - stackoverflow.com/questions/1529464/…
  • 感谢@mrtsherman,但我不确定该解决方案是否有效。我正在返回 json 数据并将该数据填充到适当的 jquery 模板中。它会自动迭代并生成所有必需的
  • 元素。我什至手动进行了测试以对其进行测试,但它仍然闪烁。也许你可以在代码中发布你的解决方案,这样我就可以更好地理解为什么我需要把 id 拿出来。谢谢!
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签