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,
});
});
});
});
希望对您有所帮助。
好吧,我的免责声明,关于脚本,我是新手。
我最近在我的网站(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,
});
});
});
});
希望对您有所帮助。