Parse JSON in JavaScript: eval gotcha

Ноябрь 24, 2009

Вот на какое поведение я недавно наткнулся, работая с аяксовыми запросами в ява-скрипте: запросы возвращают JSON, который парсится в onLoadOk:

function onLoadOk(o)
		{
			try
			{									
				data = eval(o.responseText);
				...
			}
			catch(e)
			{
				...
			}			
		}

Однако, в тестах возникала ситуация, когда ответ приходил «плохим», но в блок catch управление не переходило. Оказалось, что все дело в функции eval, которая возвращает underfined, если o.responseText = underfined — data становилась underfined, что приводило к непредвиденным ошибкам в тестах. Для того, чтобы сделать парсинг данных более предсказуемым я использовал метод из YUI от YAHOO:
data = YAHOO.lang.JSON.parse(o.responseText) и таки стал попадать в блок catch.

Описанная ситуация немного искусственна, так как по большей части мы были виноваты в том, что приходят такие данные в тестах, однако, о таком поведении eval я не был в курсе.

tags: , ,
posted in Web by dmitko

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org