Javascript 从AJAX成功解析字符串以作为JQuery运行
在我的HTML页面上,我有一篇AJAX文章来获取一些数据。返回的数据包含一个字符串,该字符串的内容是原始javascriptJavascript 从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;
$.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因为脚本,例如在处理数据库请求时,可以很容易地返回一个整数来工作