0

我目前正在使用 Jquery 的 .load() 函数异步插入页面片段。在我从中加载页面片段的 URL 中,我还设置了一个 Javascript 全局变量值(在脚本标记中)。

var loaded_variable = 'value1'

有没有办法可以使用 .load() 函数插入页面片段并检索 的值loaded_variable,类似于以下代码:

    function loadProducts(url) {
                 $('#mainplace').load(url + ' #submain', function() { 
                       current_variable = loaded_variable;
                 });
    }

I am aware that script blocks are used when a selector expression is appended to the URL, so if the .load() function won't work, I'm open to other Jquery functions that can accomplish this.

额外信息:我从中加载的 URL 是用 HTML 和 Python (Web2py) 编写的;相同的 Python 变量用于呈现页面片段并设置loaded_variable值。

4

2 回答 2

1

如果您想从页面中获取片段并在其上执行脚本,则需要一种不同的方法。这有点hacky,但有效。

$.ajax({url: 'fetch_page.html', dataType: 'text'}).done(function(html) {
    var dom = $('<html />').prop('innerHTML', html);
    $('body').append(dom.find('body p'));
    $('head').append(dom.find('script'));
});

它从我们获取的页面中获取一个p标签并将其插入到body父页面中。它还执行获取页面中的任何脚本。

如果您对此感到疑惑prop('innerHTML...,那是因为如果我使用了 jQuery 的.html()方法,它会清理输入字符串,因此我们不会得到我们想要的结果。

我的第一个想法是文档片段,但是您不能将 HTML 字符串插入到文档片段中 - 您必须通过 DOM 方法附加。即使在这种情况下,它也不会dom像我一样简单地使用一个元素来解析 dom ()。

正如我所说,有点hacky,但有效。

于 2012-07-11T20:25:16.810 回答
0

我想我有一个类似的问题。我已经创建了一个页面来注册时事通讯。我想在我网站上每篇博文的底部加载这个页面。我不希望它出现在页脚中,因为它特定于我的博客页面,我希望能够编辑它而无需编辑每篇博客文章。

我使用 url /blog-newsletter-form 创建了这个页面,其中包含来自电子邮件 CRM 的一些代码。

然后,我在我的博客文章末尾添加了一个带有“blog-newsletter-form”类的 div,并将以下内容放在页面标题中以从我的博客文章的第一页部分加载内容。

$( document ).ready(function() {
    $('.blog-newsletter-form').load("/blog-newsletter-signup #page .page-section:nth-of-type(1) .content");
});

这很好用,除了.. 加载功能正在从我的时事通讯表单工作所需的时事通讯页面中剥离脚本。

如何加载页面片段,同时保留新闻通讯的脚本。我尝试使用您上面的示例代码,但无法正常工作。

于 2021-02-26T17:57:16.260 回答