以下是问题字符串:
$.ajax(......
,success:function(msg){
var obj = eval('['+msg.d+']');
},
....
}
msg.d
包含以下内容:
new Person(2, 'Name Surname','This is just string came from Par'is at Sat'urday');
如何传递javascript问题?
答案 0 :(得分:5)
如果字符串确实如您所引用的那样,则会出现语法错误并且无法正常工作(在“星期六”一词中有错误的'
)。但是,如果您将[
调用中的括号(]
和eval
)更改为括号((
和)
):
var obj = eval('('+msg.d+')');
但是,实际上几乎从来没有必要这样做(或者根本就是使用eval
)。几乎总是可能的,也是可取的,稍微重构并避免它。
如果这是您的代码的字面引用,请参见dvhh's answer below,您的函数参数名称(msg.d
)无效。
答案 1 :(得分:1)
在这种情况下使用eval实际上非常危险。你真的应该使用XML或JSON。 (这就是他们称之为AJAX的原因。)
答案 2 :(得分:1)
函数参数应该是有效的javascript标识符
尝试将msg.d更改为msg_d,例如
答案 3 :(得分:1)
您可能需要转义字符串,因为此示例正常工作:
function MyObject(myvar){
this.hello = function(){
alert('myvar= ' + myvar);
};
}
var obj1 = new MyObject('hello');
obj1.hello();
var obj2 = eval("new MyObject('world')");
obj2.hello();
(编辑:顺便说一下,我认为msg.d是因为在StackOverflow上发布之前编辑了snipplet而导致的错字?)
答案 4 :(得分:0)
出于安全考虑,我会避免使用eval()。如果用户可以将恶意代码导入数据库,则有可能最终导致此eval表达式,从而对访问此页面的任何人造成严重破坏。
我建议从AJAX请求中返回JSON,而不是使用eval。然后,您可以轻松地解析值并使用该数据构建新的Person对象。