views:

146

answers:

2

My JavaScript sometimes crashes on this line:

var json = eval('(' + this.responseText + ')');

Crashes are caused when the argument of eval() is not JSON. Is there any way to check if the string is JSON before making this call?

I don't want to use a framework - is there any way to make this work using just eval()? (There's a good reason, I promise.)

+3  A: 

If you include the JSON parser from json.org, you can use it's parse() function and just wrap it in a try/catch, like so:

try{
   var json = JSON.parse(this.responseText);
}catch(e)
   alert('invalid json');
}

Something like that would probably do what you want.

inkedmn
+3  A: 

I highly recommend you use a javascript JSON library for serializing to and from JSON. eval() is a security risk which should never be used unless you are absolutely certain that its input is sanitized and safe.

With a JSON library in place, just wrap the call to its parse() equivalent in a try/catch-block to handle non-JSON input:

try
{
  var jsonObject = JSON.parse(yourJsonString);
}
catch(e)
{
  // handle error 
}
Håvard S