Ese HTML casi siempre es una página de error. Pediste datos a una dirección, esa dirección no existe, y el servidor te devolvió educadamente su página de no encontrado. Tu código no mira si la respuesta era correcta: intenta interpretarla directamente como datos y revienta ahí.
En apps de una sola página hay una variante especialmente confusa. Estas apps están configuradas para devolver su página principal ante cualquier dirección desconocida, porque así funciona la navegación interna. El efecto secundario es que una llamada a una dirección equivocada no devuelve un error claro: devuelve tu propia web. De ahí que el error hable de HTML inesperado cuando tú creías estar hablando con una base de datos.
Las causas concretas se reducen a tres. La dirección se construye con una variable de entorno que llegó vacía, y la petición acaba yendo a una ruta que no existe. La dirección tiene una barra de más o de menos al unirse con la ruta. O el servicio ha respondido con una página de mantenimiento o de bloqueo en vez de con datos.