如何在ajax响应页面中执行javascript?

时间:2014-02-21 13:14:07

标签: javascript jquery ajax html5

我正在进行 ajax调用,从该页面获取整页,我获取该页面的部分(其中包含javascript) 即可。当我附加html页面的部分时, javascript不会被执行。

如果我直接附加ajax响应,则执行脚本并正常工作。我的问题是,当我尝试从ajax响应中追加页面部分时,为什么不执行javascript?我想让它发挥作用。有什么建议吗?

Javascript函数:

function showUsers(pageNumber) {
    $.ajax({
        url : '/ajax/users/show_users',
        data : {
            pageNumber : pageNumber == null ? 1 : pageNumber
        },
        type : 'get',
        cache : false,
        dataType: 'text',
        success : function(response, textStatus, xhr) {
            var resultData = '<div>' + response + '</div>';
            var todo = $(resultData).find("#todo");
            console.log(todo.text());
            $('#users').html(todo);
        }
    });
};

show_users.html页面:

<!DOCTYPE html>
<html>
<head>
<title>Testing</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script src="/resources/js/jquery.js"></script>
</head>
<body>
    <h1 id="kalees">My First Heading Kalees</h1>
    <div id="todo">
        <h1>My First Heading</h1>

        <p>My first paragraph.</p>

        <script>
            $(document).ready(function() {
                alert("Hello world from ajax html page");
            });
        </script>
    </div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

我认为你违反了“同源政策” http://en.wikipedia.org/wiki/Same_origin_policy 因此,如果这是正确的问题,这应解释原因。

“在计算中,同源策略是许多浏览器端编程语言(如JavaScript)的重要安全概念。该策略允许在源自同一站点的页面上运行脚本 - 方案,主机名的组合和端口号[1] - 访问彼此的DOM没有特别限制,但阻止访问不同站点上的DOM。[1]同源策略也适用于XMLHttpRequest和robots.txt。[2]“

Ben Everard在这篇文章中也解释了这个概念和解决方案 How to call external url in jquery?

。 。 。

JSONP是他建议的解决方案: “如果不使用JSONP,你就会遇到阻止XmlHttpRequest获取任何数据的同源策略”,因此你需要为它提供相同的协议和主机,以便它可以信任加载它。


如果你觉得时间听起来好像你可能面临一个非常标准的问题,即AJAX没有以直观的方式调用东西,所以可能需要一些时间来看看异步调用是如何工作的。

在其他帖子中,AJAX调用有几个很好的答案。 How do I return the response from an asynchronous call?

FelixKing在此提供了两个解决方案,解释了问题以及如何以正确的方式编写解决方案。

此外,如果这些都不起作用,您可以尝试添加错误功能并查看它告诉您的内容:

     success : function(response, textStatus, xhr) {
         var resultData = '<div>' + response + '</div>';
         var todo = $(resultData).find("#todo");
         console.log(todo.text());
         $('#users').html(todo);
     },
     error: function(e) {
         alert('Error: '+e);
     } 

希望这有帮助!