2012-07-11 96 views
0

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

var loaded_variable = 'value1' 

有没有一种方法,我可以使用.load()函数在页面中插入片段和检索loaded_variable值,像下面的代码:

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

我知道脚本当选择器表达式附加到URL时使用块,所以如果.load()函数不起作用,我可以使用其他可以实现这一点的Jquery函数。

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

回答

1

如果您希望从页面获取片段并在其上执行脚本,则需要采用其他方法。这有点不方便,但有效。

$.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()方法,sanitises输入字符串,所以我们没有得到我们想要的结果。

我的第一个想法是一个文档片段,但不能将HTML字符串插入到文档碎片中 - 您必须通过DOM方法追加。即使在这种情况下,它也不会仅仅使用元素来解析dom(dom),因为它没有提供任何节省。

就像我说的那样,这有点冒险,但是很有效。

+0

感谢您的回应!你能解释你的代码的第二行吗?我不明白选择器'$'('')'是指 – mrl 2012-07-12 03:10:53

+0

我已经使用了你的响应,但是为了执行Javascript,我使用'scripter = dom.find('script')。text(); eval(scripter);'而不是append方法,它不起作用。 – mrl 2012-07-12 19:07:55

+0

对不起 - 我刚才看到这些评论。你所提问的那一行创建了一个新的'html'元素,并用它来存放你正在加载的HTML。最重要的是,这将其转换为DOM,因此使其可以穿越。 – Utkanos 2012-07-12 19:38:19