Я думаю, что нашел это ... Посмотрите на эту строку:
var result = new Array(eval(data.d));
Теперь, поскольку eval(data.d)
уже вычисляет массив, вы, по сути, вызываете что-то вроде этого:
var result = new Array([1, 2, 3]);
Который фактически создаст массив длины один, первый элемент которого - массив длины три. Это тоже меня огорчило, пока я не подумал проверить это на консоли JS (и не заставляйте меня начинать распечатку, не считая квадратных скобок ...):
js> ra1 = new Array(1, 2, 3)
1,2,3
js> ra2 = new Array([1, 2, 3])
1,2,3
js> ra1.length
3
js> ra2.length
1
Но хорошая новость в том, что это легко исправить:
var result = eval(data.d);
Надеюсь, это поможет!