我需要从JavaScript文件php中调用,例如
$.post("my.php",
function(data)
{
data; // data is string "function Alert(){ alert("text"); };"
}
);
所以从php我得到了新的JS功能。例如函数Alert(){alert(“text”); };
我可以将该功能插入加载的js文件中吗?怎么做?
答案 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的安全问题。