代码之家  ›  专栏  ›  技术社区  ›  uzay95

将字符串作为对象求值(javascript)

  •  0
  • uzay95  · 技术社区  · 15 年前

    $.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问题?

    5 回复  |  直到 15 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    如果字符串真的如您所引用的那样,那么它有语法错误,并且不会工作(它有错误 ' 在“星期六”这个词里面。否则,请更改括号( [ ] )在你的 eval 调用括号( ( ) ):

    var obj = eval('('+msg.d+')');
    

    评估

    如果这是代码中的文字引用,请参见 dvhh's answer below ,函数参数名( msg.d )无效。

        2
  •  1
  •   Eric Mickelsen    15 年前

    在这种情况下使用eval实际上相当危险。您真的应该使用XML或JSON。(这就是他们称之为AJAX的原因。)

        3
  •  1
  •   dvhh    15 年前

    例如,尝试将msg.d更改为msg\u d

        4
  •  1
  •   wildpeaks    15 年前

    您可能需要转义字符串,因为此示例工作正常:

    function MyObject(myvar){
        this.hello = function(){
            alert('myvar= ' + myvar);
        };
    }
    
    var obj1 = new MyObject('hello');
    obj1.hello();
    
    var obj2 = eval("new MyObject('world')"); 
    obj2.hello();
    

        5
  •  0
  •   Colin O'Dell    15 年前

    出于安全原因,我会避免使用eval()。如果用户可以将恶意代码输入数据库,那么很有可能最终会出现在这个eval表达式中,从而对访问此页面的任何人造成严重破坏。

    我建议不要使用eval,而是从AJAX请求返回JSON。然后,您可以轻松地解析这些值,并用这些数据构建一个新的Person对象。