开发者

Evaluate the string as object (javascript)

Here is the problem string:

$.ajax(......
   ,success:function(msg){
      var obj = eval('['+msg.d+']');
   },
   ....
}

msg.d contains something like:

new Person(2, 'Name Surname','This is just string came from Par'is at Sa开发者_开发百科t'urday');

How can pass the javascript problem ?


If the string really is as you've quoted it, it has a syntax error and will not work (it has an errant ' inside the word "Saturday"). Otherwise, though, change the brackets ([ and ]) in your eval call to parentheses (( and )):

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

However, it should almost never actually be necessary to do this (or indeed to use eval at all). It's almost always possible, and desirable, to refactor slightly and avoid it.

If that's a literal quote from your code, see also dvhh's answer below, your function argument name (msg.d) is invalid.


Using eval in this scenario is actual quite dangerous. You really ought to be using XML or JSON. (That's why they call it AJAX.)


the function argument should be a valid javascript identifier

try changing msg.d to msg_d for example


You may need to escape your string, because this example works fine:

function MyObject(myvar){
    this.hello = function(){
        alert('myvar= ' + myvar);
    };
}

var obj1 = new MyObject('hello');
obj1.hello();

var obj2 = eval("new MyObject('world')"); 
obj2.hello();

(Edit: By the way, I assume msg.d is a typo due to editing the snipplet before posting on StackOverflow ?)


I would avoid using eval() for security reasons. If a user can get malicious code into the database, there's a chance it could end up in this eval expression, wreaking havoc for anybody who visits this page.

Instead of using eval, I'd recommending returning JSON from the AJAX request. You can then easily parse the values and build a new Person object with that data.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜