从JS插入新的JS方法

时间:2011-01-27 17:13:37

标签: javascript jquery

我需要从JavaScript文件php中调用,例如

$.post("my.php", 
           function(data)
       {
            data; // data is string "function Alert(){ alert("text"); };"
    }
);

所以从php我得到了新的JS功能。例如函数Alert(){alert(“text”); };

我可以将该功能插入加载的js文件中吗?怎么做?

5 个答案:

答案 0 :(得分:1)

如果必须这样做,我建议不要发回所有文字。只需送回身体:

alert("text");

然后你可以这样做:

$.post('my.php', function(data) {
  new Function(data) ();
});

通过将代码包装在函数中,您(在某种程度上)包含可能由简单的“eval()”引起的可能的怪异。 (你也可以在自己的匿名函数中执行“eval()”,但是我很难在SO上推荐使用“eval()”。)

现在,如果您希望以后保留函数以进行调用,那么您可以执行以下操作:

$.post('my.php', function(data) {
  window['newFunction'] = new Function(data);
});

然后,您可以随时将其称为window.newFunction()

答案 1 :(得分:0)

尝试eval

$.post("my.php", function(data)
    {
        eval(data); // data is string "function Alert(){ alert("text"); };"
    }
);

答案 2 :(得分:0)

你想要的是eval函数,它将字符串计算为JS代码:http://www.w3schools.com/jsref/jsref_eval.asp

(小心,因为存在明显的安全问题。)

答案 3 :(得分:0)

dataType设置为脚本以告诉jQuery对其进行评估。

  

“script”:将响应评估为JavaScript并将其作为纯文本返回。

http://api.jquery.com/jQuery.ajax/

使用:

$.post("my.php", function(data){
}, 'script');

或:

$.ajax({
  type: 'POST',
  url: 'my.php',
  success: function(data){
  }
  dataType: 'script'
});

请求是否需要POST?如果没有,您可以使用$.getScript

$.getScript('my.php', function(data){
});

与以下内容相同:

$.ajax({
  url: 'my.php',
  success: function(data){
  }
  dataType: 'script'
});

此方法使用jQuery的$.globalEval代替eval()

答案 4 :(得分:0)

如果你知道你从php那里得到了一个新函数,你应该能够在你得到它时实例化它:

$.post("my.php", 
       function(data){
          data();
       }
);

我会避免eval b / c的安全问题。