Porque cuando la respuesta obtenida en la petición asíncrona es XML,
ajax.responseText debe cambiar a
ajax.responseXML.
Para evitar conflictos con lo que ya tienes hecho, usaría un sexto argumento en la función
OrdenarPor() y una condición para determinar si se leerá la respuesta por
ajax.responseText o
ajax.responseXML. E incluso por
JSON.parse(ajax.responseText) si fuera JSON.