javascript - 从 AJAX 成功解析字符串以作为 JQuery 运行

标签 javascript jquery ajax

在我的 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/

相关文章:

javascript - 自定义过滤器覆盖原始数据或导致无限 $digest 循环

javascript - 使用 cookie 显示消息。 js

javascript - ASP.NET 中的多个 Google 图表

javascript - Firefox 上的 Service Worker 窗口客户端问题 - Web 推送通知

javascript - Bootstrap 模式弹出窗口立即打开和关闭

javascript - 以 HTML 格式操作 AJAX 响应

ajax - 创建 'Ajaxified' 表单字段类型

javascript - 记录 IP、时间和用户代理

jquery - 为 d3 map 上的点击事件设置颜色

javascript - 通过 Rails 和 AJAX 刷新部分页面模板时希望保持滚动位置