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

Javascript 从AJAX成功解析字符串以作为JQuery运行,javascript,jquery,ajax,Javascript,Jquery,Ajax,在我的HTML页面上,我有一篇AJAX文章来获取一些数据。返回的数据包含一个字符串,该字符串的内容是原始javascript $.ajax({ url: '@Url.Action("GetPropertyDataForInstance", "Local_Data")', type: 'POST', dataType: 'json', data: instancePropertyRequest, contentType: 'application/json;

在我的HTML页面上,我有一篇AJAX文章来获取一些数据。返回的数据包含一个字符串,该字符串的内容是原始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('alert("hello world")');

不过,请确保您确切知道要计算的内容。

您可以通过
eval
运行任何字符串:

eval('alert("hello world")');

但是,请确保您确切知道要计算什么。

为什么不使用整数格式化ajax响应

e、 g

切勿使用
eval()

eval==邪恶

为什么不使用整数格式化ajax响应

e、 g

切勿使用
eval()

eval==邪恶

这比eval稍微好一点,因为eval是邪恶的;)

使用
eval
是有害的,因为可能存在很多安全漏洞。您正在全局范围内执行代码<代码>函数
通过在自己的范围内执行,以不同的方式处理此问题

新功能
也更快

就你而言

$.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))()   

    }
})
新函数
从原始文本创建新函数

()
立即执行该函数

如果您使用ajax获取函数,我还将添加一些额外的检查和标题。 看看这个

编辑

如果要从ajax传递参数

//raw ajax response
var x='param';
alert(x)
如果要从ajax内部传递参数(不太好)

生的

编辑2

如果你得到一个物体 1.剧本 2.参数

然后需要定义一个参数名。在本例中为“x”

js

原始响应脚本

 alert(x)
更多论据:

(new Function('a','b','c','alert(a+b+c)'))(1,2,3) // 123
测试它。。。 读它。。。 滚动到底部

但是当你得到包含函数和变量的对象时。。。来自同一个ajax调用

我会简单地创建一些已经描述过的东西

生的

甚至更简单

alert('hello');

这比eval稍微好一点,因为eval是邪恶的;)

使用
eval
是有害的,因为可能存在很多安全漏洞。您正在全局范围内执行代码<代码>函数
通过在自己的范围内执行,以不同的方式处理此问题

新功能
也更快

就你而言

$.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))()   

    }
})
新函数
从原始文本创建新函数

()
立即执行该函数

如果您使用ajax获取函数,我还将添加一些额外的检查和标题。 看看这个

编辑

如果要从ajax传递参数

//raw ajax response
var x='param';
alert(x)
如果要从ajax内部传递参数(不太好)

生的

编辑2

如果你得到一个物体 1.剧本 2.参数

然后需要定义一个参数名。在本例中为“x”

js

原始响应脚本

 alert(x)
更多论据:

(new Function('a','b','c','alert(a+b+c)'))(1,2,3) // 123
测试它。。。 读它。。。 滚动到底部

但是当你得到包含函数和变量的对象时。。。来自同一个ajax调用

我会简单地创建一些已经描述过的东西

生的

甚至更简单

alert('hello');

这就是
eval
所做的。小心安全漏洞。与其返回脚本和
eval
它(这是一个安全噩梦,而且是非常讨厌的代码),为什么不在
success
处理程序中返回字符串
hello there
alert
它。我真的怀疑“hello there”alert到底是他想要的代码。可能只是为了测试反应。但是你。。。如果你能做些什么来避免
eval
,那就去做吧。如果您传入一个函数名,就可以使用
window[javscriptRawString]()执行它,这样您就很容易避免
eval
这就是
eval
所做的。小心安全漏洞。与其返回脚本和
eval
它(这是一个安全噩梦,而且是非常讨厌的代码),为什么不在
success
处理程序中返回字符串
hello there
alert
它。我真的怀疑“hello there”alert到底是他想要的代码。可能只是为了测试反应。但是你。。。如果你能做些什么来避免
eval
,那就去做吧。如果您传入一个函数名,就可以使用
window[javscriptRawString]()执行它,这样您就很容易避免
eval
几乎总是有一种比使用
eval
更好的方法。如果我们知道他的实际问题,而不是这个虚构的问题,我相信我们可以给他一个正确的答案……”“为什么不用整数格式化ajax响应?”为什么?@nzifnab您完全正确,希望OP从这个示例开始,避免
eval()
ling可能是有粘性的代码。@AnthonyGrist因为脚本,例如在处理数据库请求时,可以很容易地返回一个整数,并且很容易识别,当然,如果您希望得到数据响应,可以使用JSON返回它,但在这种特殊情况下,我们不知道OP需要什么。我不太喜欢这个“潜在的大规模转换声明“还有一些晦涩的数字代码,能做一些神奇的事情。但是没有理由不能返回JSON数据结构并基于此执行操作。几乎总是有一种比使用
eval
更好的方法。如果我们知道他的实际问题,而不是这个虚构的问题,我相信我们可以给他一个正确的答案……”“为什么不用整数格式化ajax响应?”为什么?@nzifnab您完全正确,希望OP从这个示例开始,避免
eval()很可能是有粘性的代码。@AnthonyGrist因为脚本,例如在处理数据库请求时,可以很容易地返回一个整数来工作