dongliao3742
dongliao3742
2010-12-02 12:48

为什么PHP生成的Javascript在通过AJAX加载的文件中不起作用?

I am loading a .php file via an ExtJS AJAX call like this:

menuItemApplication.header.on('click', function() {             
    Ext.Ajax.request({
        url: 'content/view_application.php',
        success: function(objServerResponse) {
            var responseText = objServerResponse.responseText;
            regionContent.update(responseText);
            var scripts, scriptsFinder=/<script[^>]*>([\s\S]+)<\/script>/gi;
            while(scripts=scriptsFinder.exec(responseText)) {
                eval(scripts[1]);
            }
        }
    });
});

Javascript in the loaded .php file executes fine:

<script type="text/javascript">
     regionContent.update('changed region content from within application view');
</script>

But if the Javascript is being generated via PHP, it is not executed:

<?php
echo "<script type=\"text/javascript\">
";
echo "regionContent.update('changed region content from within application view')';
";
echo "</script>
";
?>

Yes the responses are the same, as seen in the Firebug Net panel, here with Javascript which works:

alt text

And here with PHP-generated Javascript, which does not work:

alt text

How can I get the PHP-generated Javascript to execute?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • doubu7425 doubu7425 11年前

    Those responses aren't the same. Check the '; versus ; at the end there.

    <?php
    echo "<script type=\"text/javascript\">
    ";
    echo "regionContent.update('changed region content from within application view')';
    ";
    echo "</script>
    ";
    ?>
    

    Versus

    <?php
    echo "<script type=\"text/javascript\">
    ";
    echo "regionContent.update('changed region content from within application view');
    ";
    echo "</script>
    ";
    ?>
    
    点赞 评论 复制链接分享
  • duannengling4705 duannengling4705 11年前

    There's an extra quote in your PHP code, causing the quotes in Javascript to work incorrectly; instead of:

    echo "regionContent.update('changed region content from within application view')';
    ";
    

    You need:

    echo "regionContent.update('changed region content from within application view');
    ";
    
    点赞 评论 复制链接分享