Ajax 自动刷新导致我的 jquery 嵌入脚本无休止地重复

Ajax auto refresh causing my jquery embed script to repeat endlessly

好吧,我的免责声明,关于脚本,我是新手。

我最近在我的网站(phpbb 论坛)上设置了 jquery-oembed,它是一个代码,可以自动嵌入来自 youtube、twitter、facebook 等各种网站的媒体内容...

它很好用,只是我在将它集成到我的聊天框时遇到了问题。聊天通过 ajax 代码运行,该代码会按时间间隔自动刷新。根据我放置脚本的位置,嵌入将显示 link 并且在您手动刷新页面之前不会嵌入......或者......它会嵌入,但每次都会不断重复自己ajax 刷新。我一直在玩这个,除非绝对必要,否则我尽量避免打扰你们。

这是嵌入代码,可以在我网站的帖子中找到。

(function($) {
    $(document).ready(function() {
        $(".avatarMessage .postlink").oembed(null, {
            embedMethod: "append",
            startClosed: true, 
            maxWidth: 300,
        });
    });
})

我能通过搜索找到的最好的是我试过的这个片段。如果我将其更改为添加:

(function($) {
    $(document).ready(function() {
        $(".avatarMessage .postlink").oembed(null, {
            embedMethod: "append",
            startClosed: true, 
            maxWidth: 300,
        });
                while (update.firstChild) {
            update.removeChild(update.firstChild);
        }
    });
})

然后它不会一直重复它,但它也不允许嵌入新的 url,所以我不能使用这个。

有什么我可以为此添加的东西,它将 removeChild 限制为该消息的内容,或者可能是我完全没有看到的另一个想法(不要对我感到沮丧,我尝试,除了基本的 html 和 css).

之外,我没有太多经验

如果有人感兴趣,这里是 ajax 触发自动刷新的代码。

https://raiderforums.com/mchat/mchat_ajax_mini.js

谢谢你容忍我:)

发生这种情况是因为每次您调用 $(".avatarMessage .postlink").oembed(....) 所有匹配的元素都会被编译,即使它们已经编译。为防止出现这种情况,您可以添加 new-post class 并在元素为 compiled/embeded:

后将其删除
(function($) {
    $(document).ready(function() {
        $(".avatarMessage .postlink.new-post").oembed(null, {
            embedMethod: "append",
            startClosed: true, 
            maxWidth: 300,
        }).removeClass('new-post');
    });
})

因此,元素将不会在下一次 oembed 调用时匹配。

这是另一种选择,它使用标志代替:

(function($) {
    $(document).ready(function() {
        $(".avatarMessage .postlink").each(function(index, element) {
            var $el = $(element);
            //If already embedded just return
            if ($el.data('oembedded')) return;
            //set the flag
            $el.data('oembedded', true);
            $el.oembed(null, {
                embedMethod: "append",
                startClosed: true,
                maxWidth: 300,
            });
        });
    });
});

希望对您有所帮助。