Vamos de atrás para adelante:
Cita: Ahora porque llamas ambas funciones en el onload del body cuando en realidad me hacen falta en el onClick de un boton?
Simplemente porque no tenía armado ningún select ni nada más. Estaba probando un código lo más simple posible. Cuando las cosas no andan, muchas veces lo mejor es hacer una copia y empezar a simplificarla, hasta que funcione. Y ahí empezás a agregar cosas más complejas. Entonces es más fácil detectar en qué punto está el conflicto.
Cita: Fijate bien cómo estás llamando a las funciones, desde dónde/qué evento. Como mínimo, debería ser desde "body onLoad", porque te estás refiriendo a elementos html, que hasta que no se cargue la página, no existen. Te digo porque me pasó muchas veces poner getElementById('algunElemento') y si lo hacés antes de que la página cargue, va a aparecer como "undefined". Y ese error muchas veces corta la ejecución del script.
Durante mucho tiempo esto me dio problemas. Lo que quiero decir es que te asegures de getElementById se ejecute siempre sólo después de que la página cargó (on load). Si no, te estás refiriendo a un elemento que todavía no existe, está "undefined" y eso trae problemas en el script. Pero si hasta ahora no tuviste problemas, entonces lo estás haciendo de la forma correcta.
Cita: Acá está el código js. Lo modifiqué para que no tengas que crear y destruir el objeto XMLHttpRequest cada vez que te conectas, pero de la otra manera también funcionaba.
Con el código anterior, cada vez que llamás a la función chkPortable() estás creando un nuevo objeto AJAX.
Está en esta línea:
aj_object = AJAXObj();
Ese objeto se asigna a una variable local. Una variable local es por ejemplo, una que está dentro de una función. Al terminarse la función, la variable se destruye. No podés acceder a ella ni referenciarla. De la otra manera, creás el objeto sólo una vez, cuando carga la página (onLoad) y la asignás a una variable global. Una variable es global cuando se declara en el cuerpo del script, por ejemplo, fuera de una función. A diferencia de una local, existe durante toda la ejecución del script. La podés usar y referenciar desde cualquier lado (incluso desde adentro de una función).
(No es necesario hacerlo así, pero por lo que leí, es más recomendable. Y vuelvo sobre el punto anterior: la llamada a la función chkPortable() la hice también desde onLoad, sencillamente porque no tenía los selects y quería probar el funcionamiento del código con sólo cargar la página. En tu caso, esta última llamada no va a estar en el body onLoad.
Por último, no uso muchas librerías en php y nunca usé ninguna de esas dos que mencionás. El código que usé en php, como te dije, es sólo esto:
Código PHP:
<?php
echo "0";
?>
¿Para qué? Simplemente para ver si el JavaScript estaba funcionando o si el problema estaba en php. Si probás todo junto, es mucho más difícil aislar los errores (que es el primer paso para solucionarlos). Bueno, lo que podrías hacer ahora es chequear que el código php funcione correctamente, así te sacás la duda. Simplemente ejecutá el archivo desde el navegador y fijate si devuelve por pantalla lo que querés que devuelva. Pasale manualmente el parámetro cID (o sea
http://www.tudominio.com/admincpcatn...?opt=chk&cID=1 , etc) y fijate si anda bien. Si es así, ya sabés que el script php está bien y no hace falta tocarlo. Ya irías descartando un problema.