我正在进行 ajax调用,从该页面获取整页,我获取该页面的部分(其中包含javascript) 即可。当我附加html页面的部分时, javascript不会被执行。
如果我直接附加ajax响应,则执行脚本并正常工作。我的问题是,当我尝试从ajax响应中追加页面部分时,为什么不执行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>
答案 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);
}
希望这有帮助!