Pueden ser muchas cosas, pero creo que es porque no estas manejando bien la asincronía de JS, y la linea 5 se ejecuta inmediatamente despues de la linea 4, asi que no le da tiempo a realizarse la llamada ajax y asignarle el valor correcto a nl. Entonces cuando se resuelve la peticion y le asignas el valor a dicha variable ya es tarde, para la funcion Cniveles sigue valiendo 0 o null. prueba con esto:
// aqui la eh dejado así null o vacia
var nl = 0;
$("#st").click(async function (e) { //defino la funcion como asincrona
await obNiveles(id); //fuerzo al script a esperar que se temrine de ejecutar la funcion y su llamada ajax
Cniveles();
});
Ademas tenes un typo (error de tipeo). Pegue tu codigo en mi editor y me sale que el bracket de la linea 29 sobra. Revisa bien que todos tus bloques esten correctamente cerrados con sus
{}Me sigue arrojando lo mismo "undefined", y lo de la 29 lo pase por alto y no borre esa llave ya que es de un if que puse pero lo veo insignificante por ello no lo pegue aqui.
___________________________________________________________________
a lo de la variable nl, me refería que eh probado con ponerla null, en 0, o sin asignarle valor.
Como dices que todo depende del valor de nl eh probado llamar la función Cniveles una ves que alla echo success ya que le haya asignado el nuevo valor de nl, pero no dentro de la funcion donde hago la petición ajax si me da el valor correcto nl.
___________________________________________________________________
Después de ya un tiempo checando ver que pudo a ver sido ya que la variable nl solo la llego a usar en esas 2 funciones obte por esta solución.
La verdad no se porque me ocurrió este error ya que eh echo bastantes veces y jamas tuve problemas similares a esto.
Gracias a ambos ya eh aprendido varias cosillas que no sabia por ustedes.
var nl = 0;
$("#st").click(function (e) {
obNiveles(id);
});
function Cniveles(nx){
console.log(nx);
var dv= document.getElementById("levels");
var tabla = document.createElement("table");
var tblBody = document.createElement("tbody");
var cclevels =0;
for (var i = 0; i < 5; i++) {
var hilera = document.createElement("tr");
for (var j = 0; j < nx; j++) {
}
}
tblBody.appendChild(hilera);
tabla.appendChild(tblBody);
dv.appendChild(tabla);
}
function obNiveles(rt){
var STEP = {
"x" : rt
};
$.ajax({
data: STEP,
url: 'scripts/datagame1.php',
type: 'POST',
success:function(data){
nl = data;
Cniveles(nl);
console.log('recibe:'+data+',valor puesto:'+nl);
}
});
}