在我的 HTML 页面上,我有一个 AJAX Post 来获取一些数据。返回的数据包含一个字符串,这个字符串的内容是原始javascript。
$.ajax({
url: '@Url.Action("GetPropertyDataForInstance", "Local_Data")',
type: 'POST',
dataType: 'json',
data: instancePropertyRequest,
contentType: 'application/json; charset=utf-8',
success: function (response) {
var javscriptRawString = response.javascriptToExecute;
var alertString = response.data;
}
})
javscriptRawString的内容:
alert(alertString);
获取到这个javascriptRawString后,如何才能直接执行里面的javascript??
最佳答案
这比 eval 稍微好一点,因为 eval 是邪恶的 ;)
(new Function(response.data))()
使用 eval
是邪恶的,因为可能存在很多安全漏洞。您正在全局范围内执行代码。 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 获取函数,我还会添加一些额外的检查和 header 。 检查这个。
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)
原始响应.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');
关于javascript - 从 AJAX 成功解析字符串以作为 JQuery 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711612/