Yo hice una función a la que le retorno SIEMPRE un json, el json contiene un arreglo que sólo puede tener dos posibles respuestas, html o javascript.
Si la respuesta es javascript, se ejecuta, si es html, se dibuja en el contener indicado, ejemplo:
Código Javascript
:
Ver originalrespuesta=[
{"script":"codigo javascript"},
{"encabezado":"html que va a ir en el encabezado"}
]
Así, cuando recibo la etiqueta "script" la ejecuto con eval, si recibo cualquier otra cosa, asumo que es el id de un ekemento al que le voy a insertar el html.
Dado que te sería difícil cambiar lo que tienes a esta metodología, te sugiero que en donde recibes la respuesta ajax, podrías poner una condición, que si la respuesta contiene cierta palabra, le haces el eval, si no, lo que siempre haces.