Niente, a parte l'essermi dimenticato alcune , che ho sistemato, continua a non funzionare.

Penso però che dipenda dal fatto che il codice di risposta proviene da una funzione che ho implementato con Joomla (sto realizando un componente).
Sembra che la risposta non sia riconosciuta come stringa ed eval() fallisce.

se nel codice javascript, alla variabile json invece del responseText metto

codice:
var json = "[ {id:"1", formato:"A4", h:"297", l:"210",}, {id:"2", formato:"A5", h:"210", l:"148",}, {id:"3", formato:"A6", h:"148", l:"105",} ]";
eval() funziona ed i dati vengono formattati e stampati come specificato nel ciclo for.

Come posso fare ad essere sicuro che la risposta proveniente dalla funzione php sia riconosciuta come stringa?

toString() non mi risolve il problema.