这比 eval 稍微好一点,因为 eval 是邪恶的;)
(new Function(response.data))()
使用eval
是邪恶的,因为可能存在很多安全漏洞。您正在全局范围内执行代码。Function
通过在自己的范围内执行以不同的方式处理这一点。
new Function
也更快
在你的情况下
$.ajax({
url: '@Url.Action("GetPropertyDataForInstance", "Local_Data")',
type: 'POST',
dataType: 'json',
data: instancePropertyRequest,
contentType: 'application/json; charset=utf-8',
success: function (response) {
(new Function(response.data))()
}
})
new Function
从原始文本创建一个新函数。
()()
立即执行函数
如果您使用 ajax 获取函数,我还会添加一些额外的检查和标题。检查这个。
https://stackoverflow.com/a/17468822/2450730
编辑
如果你想从 ajax 传递参数
//raw ajax response
var x='param';
alert(x)
如果您想从 ajax 内部传递参数(不好。)
success: function (response) {
var x='param';
(new Function(response.data))(x)
}
生的
alert(x);
编辑 2
如果你得到一个对象 1.脚本 2.参数
那么您需要定义一个参数名称。在本例中为“x”。
js
(new Function('x',response.script))(response.param)
RAW response.script
alert(x)
更多论据:
(new Function('a','b','c','alert(a+b+c)'))(1,2,3) // 123
测试它... http://jsfiddle.net/pLQzd/
阅读它... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function
滚动到底部。
但是当您从同一个 ajax 调用中获取包含函数和变量的对象时
我会简单地创建一些已经描述过的东西。
生的
var param='hello';
alert(param);
甚至更简单
alert('hello');