Вы отправляете асинхронный запрос. Это означает, что функция вернется, даже если данные еще не готовы. Но ваш вызов предполагает, что ответ JSON готов, когда вызывается getPlants
. Что, очевидно, делает results
неопределенным, потому что вы его не ждете.
Поставь свой
plants = eval('('+results+')');
document.write(typeof(plants));
Внутри функции xhr.onreadystatechange
, чтобы она работала, или открывайте соединение как синхронное
xhr.open("GET","db_interactions.php",false);
Кстати, не используйте eval
для анализа JSON , потому что код может быть введен злонамеренно. Вместо этого используйте анализатор JSON.