执行AJAX返回的脚本

时间:2015-09-13 21:31:20

标签: javascript php ajax return alert

提示:“你可以简单地将一个json对象/数组从php发送到js,并执行每个条目,如”update_match('1');“使用eval()函数,请停止以这种方式发送js代码” - Lucian Depold。

在index.php中,我有这个代码,它在文档准备就绪时执行:

$.post('php/main.php', {elements: 1}, function(return_msg) {
    alert(return_msg);
});

我得到的回复是一堆脚本,正如预期的那样,具有预期值。但是,他们没有执行!如何让它们执行?

以下是回复:

<script>jsfunction(37069);</script><script>updateTextbox('');</script><script>update_match('1', '19.30 Friday 15/5', '1');</script><script>update_player('1', '1', 'recoba', 'cmf', 'teo', '0', '0');</script><script>update_player('1', '2', 'nesta', 'cb', 'tsoulou', '0', '0');</script><script>update_player('1', '3', 'raul', 'cf', 'striker', '0', '0');</script><script>update_player('1', '4', 'samuel', 'cb', 'mafia', '', '1');</script><script>update_player('1', '5', 'deisler', 'cmf', 'free_kick', '1', '');</script><script>update_player('1', '6', 'ferdinard', 'cb', 'strong', '1', '');</script><script>update_match('2', 'Match 2', '0');</script>

当我在index.php底部生成这些脚本的PHP代码时,所有js函数都被正确调用。但是由于这个question,我不得不将代码移动到另一个.php文件。

3 个答案:

答案 0 :(得分:2)

这样做:

在PHP中......

$arrayOfCalls = array();
$arrayOfCalls[]="update_match('1')";
$arrayOfCalls[]="update_match('2')";

$dummy = array();
$dummy['calls'] =$arrayOfCalls;
echo json_encode($dummy);

在Javascript中......

$.post('php/main.php', {elements: 1}, function(return_json) {
    return_json = JSON.parse(return_json);
    return_json.calls.forEach(function(code){
    eval(code);
    })
});

答案 1 :(得分:1)

您可以将结果附加到您的网页:

$.post('php/main.php', {elements: 1}, function(return_msg) {
    $('body').append(return_msg);
});

代码将被执行,但我不确定这样做是否安全。

答案 2 :(得分:1)

AJAX调用提供的日期只是数据 - 或文本。为了将其解释为JavaScript,您必须将其附加到dom。

两种方式: 首先,直接附加数据:

$.post('php/main.php', {elements: 1}, function(return_msg) {
    alert(return_msg);
    $('body').append(return_msg);
});

但也有shorthand method

$.getScript('php/main.php?elements=' + 1, function () {
   // script loaded

});

请阅读文档,有一些警告!