elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  No cambia el valor de mi variable JS
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No cambia el valor de mi variable JS  (Leído 4,027 veces)
SrTrp


Desconectado Desconectado

Mensajes: 327


Script/C#


Ver Perfil
No cambia el valor de mi variable JS
« en: 3 Mayo 2020, 04:07 am »

Traigo un dato de una tabla via ajax, pero esta variable supuesta mente cambia al momento que se lo asigno pero despues quiero volver a usarla y no aparece el valor.
Código
  1. // aqui la eh dejado así null o vacia
  2. var nl = 0;
  3. $("#st").click(function (e) {
  4.  obNiveles(id);  
  5.  Cniveles();
  6. });
  7.  
  8. function Cniveles(){  
  9. //AQUI APARECE 0 NULL O UNDEFINED, TODO DEPENDE DE QUE LE ASIGNE AL INICIO
  10.   console.log(nl);
  11.  var dv= document.getElementById("levels");
  12.  
  13.  var tabla   = document.createElement("table");
  14.  var tblBody = document.createElement("tbody");
  15. var cclevels =0;
  16.  for (var i = 0; i < 5; i++) {    
  17.    var hilera = document.createElement("tr");
  18.  
  19.    for (var j = 0; j < nl; j++) {      
  20.      //AQUI NUNCA ENTRA COMO SU VALOR NUNCA PASA DE 0
  21.      }
  22.    }
  23.  
  24.    tblBody.appendChild(hilera);
  25.  }
  26.  
  27.  tabla.appendChild(tblBody);
  28.  dv.appendChild(tabla);
  29.  }
  30.  
  31.  
  32.  
  33. function obNiveles(rt){
  34.  var STEP = {
  35.          "x"  : rt
  36.  };
  37.  $.ajax({
  38.          data:  STEP,
  39.          url:   'scripts/datagame1.php',
  40.          type:  'POST',
  41.          success:function(data){
  42.         nl = data;
  43. //aqui me muestra "recibe:2,valor puesto:2", que es totalmente correcto
  44.         console.log('recibe:'+data+',valor puesto:'+nl);
  45.  
  46.  }
  47.  
  48.  });
  49. }
  50.  
  51.  


En línea

[u]nsigned


Desconectado Desconectado

Mensajes: 2.397

JS/Node developer


Ver Perfil WWW
Re: No cambia el valor de mi variable JS
« Respuesta #1 en: 3 Mayo 2020, 04:41 am »

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:


Código
  1.  
  2. // aqui la eh dejado así null o vacia
  3. var nl = 0;
  4. $("#st").click(async function (e) { //defino la funcion como asincrona
  5.  await obNiveles(id);  //fuerzo al script a esperar que se temrine de ejecutar la funcion y su llamada ajax
  6.  Cniveles();
  7. });
  8.  
  9.  

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 {}


En línea

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: No cambia el valor de mi variable JS
« Respuesta #2 en: 3 Mayo 2020, 11:46 am »

Citar
// aqui la eh dejado así null o vacia
/* Ni está null, ni está vacia ni sin definir. Es un number con valor 0. No es lo mismo. */
var nl = 0;

$("#st").click(function (e) {
  /* Usa mínimo 2 espacios de identación. A veces usas 1 y otras 2. Comprueba los ajustes de tu editor. */
  ObNiveles(id); 
  Cniveles();
});

function Cniveles() {   
  //AQUI APARECE 0 NULL O UNDEFINED, TODO DEPENDE DE QUE LE ASIGNE AL INICIO
  /* Depende del valor de nl cuando hagas la llamada a la función Cniveles. */
  console.log(nl);

  var dv = /* Deja siempre el mismo espacio entre el identificador de la variable, el operador de asignación y la expresión. */ $("#levels");
  /* No es coherente que antes obtengas por id de esta forma $("#st") y ahora utilizes el método getElementById, usa siempre la misma forma. */

  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 < nl; j++) {     
      //AQUI NUNCA ENTRA COMO SU VALOR NUNCA PASA DE 0
      /* Depende del valor que tenga nl cuando llames a la función */
    }
  }
  tblBody.appendChild(hilera);
}

/* Aquí estás fuera de la función Cniveles y estás cerrando un corchete de un cuerpo que no existe o que no pegaste en el foro. Te lo dejo comentado. */
tabla.appendChild(tblBody);
dv.appendChild(tabla);
/*}*/

/* Sigue siempre el mismo patrón a la hora de nombrar variables y funciones. En la función anterior usas una mayúscula de primer letra y en esta usas minúscula */

function ObNiveles(rt) {
  var STEP = {
    "x"  : rt
  };

  $.ajax({
    data: STEP,
    url: 'scripts/datagame1.php',
    type: 'POST',
    success: function(data) {
      nl = data;
      //aqui me muestra "recibe:2,valor puesto:2", que es totalmente correcto
      console.log('recibe:'+data+',valor puesto:'+nl);
      /* Aquí estás en una función anónima callback. Esta función se llama cuando se complete la petición al servidor. Todo código que dependa del nuevo valor de nl deber ir aquí o ser llamada desde aquí. */

    }
  });
}
« Última modificación: 3 Mayo 2020, 11:49 am por @XSStringManolo » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

SrTrp


Desconectado Desconectado

Mensajes: 327


Script/C#


Ver Perfil
Re: No cambia el valor de mi variable JS
« Respuesta #3 en: 3 Mayo 2020, 21:31 pm »

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:


Código
  1.  
  2. // aqui la eh dejado así null o vacia
  3. var nl = 0;
  4. $("#st").click(async function (e) { //defino la funcion como asincrona
  5.  await obNiveles(id);  //fuerzo al script a esperar que se temrine de ejecutar la funcion y su llamada ajax
  6.  Cniveles();
  7. });
  8.  
  9.  

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.
Código
  1. var nl = 0;
  2. $("#st").click(function (e) {
  3.  obNiveles(id);    
  4. });
  5. function Cniveles(nx){  
  6.   console.log(nx);
  7.  var dv= document.getElementById("levels");
  8.  var tabla   = document.createElement("table");
  9.  var tblBody = document.createElement("tbody");
  10. var cclevels =0;
  11.  for (var i = 0; i < 5; i++) {    
  12.    var hilera = document.createElement("tr");
  13.  
  14.    for (var j = 0; j < nx; j++) {      
  15.      }
  16.    }
  17.    tblBody.appendChild(hilera);
  18.  tabla.appendChild(tblBody);
  19.  dv.appendChild(tabla);
  20.  }  
  21. function obNiveles(rt){
  22.  var STEP = {
  23.          "x"  : rt
  24.  };
  25.  $.ajax({
  26.          data:  STEP,
  27.          url:   'scripts/datagame1.php',
  28.          type:  'POST',
  29.          success:function(data){
  30.         nl = data;
  31.         Cniveles(nl);
  32.         console.log('recibe:'+data+',valor puesto:'+nl);
  33.  }
  34.  });
  35. }
  36.  



En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: No cambia el valor de mi variable JS
« Respuesta #4 en: 3 Mayo 2020, 22:52 pm »

Código
  1. var nl = 0;
  2. $("#st").click(function (e) {
  3.  obNiveles(id);
  4. });
  5.  
  6.  
  7.  
  8. function Cniveles(nx) {
  9.  console.log(nx);
  10.  var dv = document.getElementById("levels");
  11.  var tabla = document.createElement("table");
  12.  var tblBody = document.createElement("tbody");
  13.  var cclevels = 0;
  14.  
  15.  for (var i = 0; i < 5; i++) {
  16.    var hilera = document.createElement("tr");
  17.    for (var j = 0; j < nx; j++) {
  18.      /* Nada de momento. */
  19.    }
  20.  }
  21.  
  22.  tblBody.appendChild(hilera);
  23.  tabla.appendChild(tblBody);
  24.  dv.appendChild(tabla);
  25. }
  26.  
  27.  
  28.  
  29. function obNiveles(rt) {
  30.  var STEP = {
  31.    "x" : rt
  32.  };
  33.  
  34.  $.ajax({
  35.    data: STEP,
  36.    url: 'scripts/datagame1.php',
  37.    type: 'POST',
  38.    success: function(data) {
  39.      nl = data;
  40.      Cniveles(nl);
  41.      console.log('recibe:'+data+',valor puesto:'+nl);
  42.    }
  43.  });
  44. }

Vuelvo a insistir, deberías tener una mejor consistencia en el código que usas. Te estás complicando mucho la vida por no ordenar el código bien y no cuesta nada.

Aquí tienes un artíctulo al respecto:  http://developinginspanish.com/2018/03/31/guia-de-estilo-javascript-de-google/
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines