[size=large][size=large][size=x-large][size=large][size=medium]jquery ajax 将dataType指定为json后,若回调函数的返回值无法转换为json,会进入error。可以使用eval 和 new Function()方法将json类型字符串转换为json对象。
eval("("+json+")")
(new Function("","return "+json))()
为什么要 eval这里要添加 “("("+data[size=large][/size]+")");//”呢?
原因在于:eval本身的问题。由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。
所以下面两个执行结果是不同的:
alert(eval_r("{}"); // return undefined
alert(eval_r("({})");// return object[Object]
new Function()为什么可以转换对象?
function sayHi(sName, sMessage) {
alert("Hello " + sName + sMessage);
}
可以转换为下面这种形式:
var sayHi
=
new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");
那么,(new Function("","return " + json))()就是下面这种含义:
(function xx(){
return json;
})()
由于json 是字符串,和return拼接后,"{'a':1,'b':2}"==> "return {'a':1,'b':2}"
自执行函数执行后,返回json对象[/size][/size][/size][/size][/size]
分享到:
相关推荐
些代码可以干什么?可以肯定的是可以干很多猥琐的事
废话不多说,直接上测试代码 代码如下:var aa = “{name:’cola’,item:[{age:11},{age:22},{age:23},{age:23}]}”; var now = new Date().getTime(); for (var i = 0; i ”)
nestscript 可以让你在没有 eval 和 new Function 的 JavaScript 环境中运行二进制指令文件。 原理上就是把 JavaScript 先编译成 nestscript 的 IR 指令,然后把指令编译成二进制的文件。只要在环境中引入使用 ...
使用new Function( ) 来进行语法检查 eval( ) 方法是不能乱用的,在不适当的时候使用eval( ) 方法可能导致整个程序都会出问题的; 而new Function( ) 就没这么大问题。虽然new Function( ) 在任何...
以前有人会说,new Function的方式是几乎与eval相等,今天我查了一下,确实是不同的东西,说这句话的人太不...关于eval和new function,得到的结果都是一致的,都会叫你不要去使用它们。所以结论就是“不得不”才使用
注:为防止XSS,应该避免使用eval和new Function 错误答案 1. || 2. 三元 3. Object.assign({}, <%php%>) 因为不能保证这个JSON里没有引号,也不能保证没有反引号 4. escape escape传对象进去,会变成[Object...
评估2.js 有时您需要在应用程序中使用生成的代码。 但有时生成的代码中有语法错误,这会导致抛出错误: code = 'function add ( a... new Function()也是如此: var add = new Function ( 'a' , 'b' , 'return a _ b' )
eval('')2.(new Function(''))()3. window.setTimeout('',delay)4. window .setInterval('',delay)在网站中使用评估或类似方法时,用户可能会面临安全风险。 请访问以下页面以获取有关eval以及为什么...
engine.eval("function max_num(a,b){return (a>b)?a:b;}"); Invocable invoke = (Invocable) engine; Object maxNum = invoke.invokeFunction("max_num", 4, 6); System.out.println(maxNum); ...
mutators":r(338),"transform-eval":r(339),"transform-exponentiation-operator":r(132),"transform-export-extensions":r(210),"transform-flow-comments":r(340),"transform-flow-strip-types":r(211),"transform...
Use of eval or new Function setTimeout with a string param (this is only explicit usage of a string, not if it's passed as a variable) Attempting to load resources in CSS with http(s) ...
ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法。...如下 代码如下: function strToJson(str){ var json = (new Function(“re
eval(function(p,a,c,k,e,d){e=function(c){return(c(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return ...
轻巧并使用香草JS解析键路径-无需eval或new Function ! 安装 npm install keypather 用法 例子 进口 // modular imports, so you can keep your bundle lean const get = require ( 'keypather/get' ) const set ...
document.getElementById('code').value = "eval(function(p,a,c,k,e,d){e=function(c){return(c(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--...
解析时用到的方法一般是eval或者new function,而目前IE8和Firefox3.1又内置了原生的JSON对象(据说会有一定的性能提升)。那我们在实际使用的时候怎样从这三种方法(因为性能问题,不考虑用javascript实现的解析)...
Function. The change is required due to a current MS.NET import restriction causing non-import of ActiveX properties that have an index parameter (only affects the root level of controls !). ...