执行通过AJAX检索的JavaScript代码?
我已将我的问题浓缩为以下示例代码:执行通过AJAX检索的JavaScript代码?,javascript,ajax,Javascript,Ajax,我已将我的问题浓缩为以下示例代码: <?php if($_GET['ajax']){ echo ' <script type="text/javascript"> alert("test alert"); var newdata="Hello Again!"; $(container).append(newdata); </script>
<?php
if($_GET['ajax']){
echo ' <script type="text/javascript">
alert("test alert");
var newdata="Hello Again!";
$(container).append(newdata);
</script>';
exit();
}
?>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var container = document.getElementById('testdiv');
var data = 'Hello World' ;
$(container).append(data);
});
function goAjax(){
$.ajax({
url: '/test.php/?ajax=1',
type: "POST",
data: {"xxx":1},
success: function(data){
$("#return").empty();
$("#return").append(data);
}
});
};
</script>
</head>
<body>
<a href="#" onclick="goAjax();">test</a>
<div id="testdiv"></div>
<div id="return"></div>
</body>
</html>
$(文档).ready(函数(){
var container=document.getElementById('testdiv');
var数据='你好世界';
$(容器)。追加(数据);
});
函数goAjax(){
$.ajax({
url:'/test.php/?ajax=1',
类型:“POST”,
数据:{“xxx”:1},
成功:功能(数据){
$(“#return”).empty();
$(“#返回”)。追加(数据);
}
});
};
我试图做的是将位于代码顶部的JS脚本加载到web页面中并执行它
alert()
执行得很好,但我无法再次获得Hello代码>以显示。它没有执行脚本的这一部分
有人能解释一下原因吗
请注意,使用前面定义的引用(容器
)对我的问题至关重要,而涉及直接引用的解决方法并不能解决问题
谢谢 一种方法是使用
var script = document.createElement('script');
script.innerText = 'code retrieved from ajax';
document.appendChild(script);
另一种方法是从jQuery中选择jQuery.getScript()
。我猜再次问好
文本不会显示,因为引用的容器
变量在全局范围内不可用。您在此处将容器
定义为局部变量:
$(document).ready(function(){
var container = document.getElementById('testdiv');
var data = 'Hello World' ;
$(container).append(data);
});
因此,尝试全局定义容器。或者只需在返回的脚本中重新选择#testdiv
(而不是引用容器
)
为了运行脚本,我建议您不要自己去搞乱
s,而直接使用它。试试看,它完全可以满足您的需要。@try catch finally:谢谢您的建议,我不知道这一点。不幸的是,除了脚本之外,我还加载了其他代码——因此理想情况下,我正在寻找一个一次性解决方案。这意味着什么,您也加载了其他代码?请求将不仅返回Javascript(例如数据、文本、html)或其他您不执行的脚本内容?是,正确<代码>
以及其他静态HTML代码正在返回;我只是想让脚本直接执行,所以我只需要把所有东西都输入一次。第三种(也是最危险的)方法是eval()
代码本身。谢谢大家。根据我上面的评论,我还加载了其他代码(不仅仅是脚本)——因此理想情况下,我正在寻找一个一键解决方案,在那里我可以附加一个
标记并让它执行。不确定为什么看不到我的引用容器
。有关更多详细信息,请参见此:是的,变量定义完全正确。在我上面的示例中,如何准确地全局定义容器
,以便在注入的脚本中使用它?@RC您可以不做var container=
,只做window.container=
。通常,全局定义变量不是一个好主意,但这可能是另一天的主题:DJames,完美,谢谢。问题解决了。这是一个小型的内部系统,可能会发生灾难或安全问题等,所以从功能上来说,这对我们来说很好。