内联jQuery脚本在AJAX调用中不起作用

时间:2010-01-29 14:25:48

标签: javascript jquery ajax dom

我有一个问题:
虽然我从另一个带有ajax的页面调用内联脚本(也使用jQuery) - 似乎jQuery不再定义(?),并且我不能使用任何应该应用的jQuery函数(根据内联脚本)内容。

它基本上是一个新闻列表,其中包含指向特定新闻项的链接。我现在更喜欢使用内联脚本,因为我不会在其他地方使用此功能。

$.ajax({
 url: href,
 cache: false,
 success: function(html){
  $('#fancy_ajax').append($(html).find('.mainContentPadded'));
}
});

正如您所看到的,我只是调用另一个页面的一部分并将其内容附加到页面。

当我加载整页(不是它的一部分)时 - jQuery按预期工作(这就是为什么我遇到了这个想法,它需要被“重新加入”)。

谢谢!

2 个答案:

答案 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加载到页面中的吗?比如,你在浏览器中加载页面,然后发生了什么事情,javascript被加载到页面中?这是行不通的,因为以这种方式加载的任何javascript都不会被执行。

如果可能的话,我建议将其加载到原始页面的javascript中。如果没有,您可以获取ajax请求的结果,并遍历它查找脚本标记,并将其内容作为成功函数的一部分进行eval()。它不是真正有效(或超级安全,确保你完全信任加载内容的来源),但它将完成工作。