我有一个问题:
虽然我从另一个带有ajax的页面调用内联脚本(也使用jQuery) - 似乎jQuery不再定义(?),并且我不能使用任何应该应用的jQuery函数(根据内联脚本)内容。
它基本上是一个新闻列表,其中包含指向特定新闻项的链接。我现在更喜欢使用内联脚本,因为我不会在其他地方使用此功能。
$.ajax({
url: href,
cache: false,
success: function(html){
$('#fancy_ajax').append($(html).find('.mainContentPadded'));
}
});
正如您所看到的,我只是调用另一个页面的一部分并将其内容附加到页面。
当我加载整页(不是它的一部分)时 - jQuery按预期工作(这就是为什么我遇到了这个想法,它需要被“重新加入”)。
谢谢!
答案 0 :(得分:2)
因此,如果我正确理解您的问题,那么html变量中包含一些JavaScript?如果是这样,它将无法工作,因为由于安全风险,浏览器不会执行从AJAX命中检索到的JavaScript。
我建议您在页面中包含启动Ajax请求的必要javascript代码,以便在您添加新内容时它已经可用。
*编辑...
monksp添加了一个很棒的链接作为评论,展示了如何让jQuery完全按照你的意愿行事。
这里也有一些代码可以手动执行:
<html>
<head>
<title>Test JavaScript JSON</title>
</head>
<script src="https://www.google.com/jsapi"></script>
<script>
google.load('jquery', '1.3.2');
</script>
<body>
<script type="text/javascript">
$(document).ready(function() {
$.getJSON('testjs.json', function(json){
$(document.body).append(json.html);
eval(json.js);
});
});
</script>
</body>
</html>
这是testjs.json的内容:
{"html":"<p class=\"newelement\">Click me</p>","js":"$(\".newelement\").click(function() { alert($(this).text()); });"}
最后还有一堆现有的插件和其他动态包含javascript的东西。我过去使用过YUI Get:http://developer.yahoo.com/yui/3/get/
答案 1 :(得分:1)
如果可能的话,我建议将其加载到原始页面的javascript中。如果没有,您可以获取ajax请求的结果,并遍历它查找脚本标记,并将其内容作为成功函数的一部分进行eval()。它不是真正有效(或超级安全,确保你完全信任加载内容的来源),但它将完成工作。