执行通过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,完美,谢谢。问题解决了。这是一个小型的内部系统,可能会发生灾难或安全问题等,所以从功能上来说,这对我们来说很好。