js-header

Variables globales en Javascript

¿A que más de uno tuvo el mismo problema que yo?
Hablo de usar una función que tiene callback como $.post() de jQuery y no saber como recuperar los valores que se sesean en la respuesta de la petición.

Bueno es más bien de simple solución:

MAL:

BIEN:

Si todavía no te diste cuenta es tremendamente simple: definir las variables fuera de cualquier función. 🙂

21 Comments

  • Enrique 30/11/2010

    Mi problema es el siguiente:
    Tengo unos nombres en un vector donde el índice es el código de la persona. Ahora tengo dos funciones. En la primera realizo unos cálculos y envió a la segunda función tres variables, la primera un vector donde están los nombres, la segunda el índice, y la tercera es la variable global para que la actualice y me devuelva el nuevo nombre.
    El proceso lo hace bien, es decir, envió las 3 variables busca en el arreglo y encuentra el nombre en la función de búsqueda, pero al retornarlo con return no devuelve el nombre encontrado. La variable de nombre la he definido global. La pregunta es. Cómo modificar el contenido de una variable global cuando se envía desde una función a otra para modificarla?. Gracias.

    • Capy 02/12/2010

      Simplemente definí la variable fuera de las funciones.
      Ejemplo:

  • Katherien 19/12/2011

    Gracias me ha sido de gran utilidad tu aporte!!!

  • Hola, he probado tu código pero no funciona, me podrias ayudar para conseguir obtener el valor retornado en una variable definida previamente javascript?

    Saludos.

    • Capy 23/04/2012

      Si claro, dame un ejemplo y lo vemos.

  • Cesar 22/06/2012

    Tu ejemplo no me funciona, tengo el siguiente codigo:

    Siempre sale en el alert el 9999. ¿Alguna solucion?

    • Capy 22/06/2012

      No te funciona porque $.post trabaja de forma asíncrona. La solución en ese caso seria pasarle un callback a la función enviar():

      Un saludo.

  • Ronald 09/07/2012

    porque no puedo recuperar el valor de las variables.

    $(“#for1”).submit(function(){
    var u = $(“#txtUsuario”).val();
    var p = $(“#txtPass”).val();

    var s = {
    us:u,
    pa:p
    };
    var n = 0;
    $.post(“DEMOPROYECTO/validarUsuario.php”,s,function(data){
    var n = 0;
    if(data == 0){
    $(“#validar”).text(“USUARIO NO EXISTE”);
    n = 0;
    }
    else if(data == 2){
    $(“#validar”).text(“LOS CAMPOS SON REQUERIDOS-“);
    n =2;
    }
    else
    n =1;

    });
    alert(n);
    return false;

    • Ronald 09/07/2012

      aaa.. el problema es que la varible n no cambia de valor.. siempre permanese con el valor default.

  • Cristian 16/10/2013

    Interesante, pero no me ha funcionado , mira este mi código, ¿Qué estoy haciendo mal?, getPosicionActual es un método de un objeto Controller y cuando lo llamo me devuelve undefined.

    • Capy 16/10/2013

      en donde pone ” var localPosition = posicion;” quita “var” porque estas pisando la variable global. vamos, deberia quedar asi “localPosition = posicion;”

  • Laura 16/10/2013

    Hola!
    Quisiera acceder a una variable Global en C# desde Javascript, y poder editar el valor, como podría hacerlo?
    E intentado creando una variable en Global.asax pero no lo consigo, y tengo dudas de como implementar el Session con un variable nueva.

    De antemano gracias por la ayuda.

    • Capy 17/10/2013

      Lo siento, no conozco C#, soy mas de PHP del lado del servidor.

  • Miguel 22/10/2013

    Buen dia Capy, te queria molestar con una consulta referente a la utilizacion de variables globaes, mi problema es el siguiente.

    Estoy utilizando una funcion que lee datos en formato json desde un archivo php externo, la funcion almacena el array tipo json en una variable llamada productos, esta variable es global, el problema es que fuera de ese funcion, no me aparece ningun dato dentro de la variable, es como si nunca hubiera almacenando en ellos el array tipo json.

    El codigo es el siguiente:

    var productos = null; //aca defino la variable productos
    productos = (function () { //luego le digo que productos va a contener el resultado de la funcion que voy a ejecutar;
    $.ajax({ //luego por medio de ajax mando a leer el archivo topiclas_view.php el cual me devuelve un array tipo jason
    ‘async’: false,
    ‘global’: true,
    ‘url’: ‘includes/topiclas_view.php’,
    ‘dataType’: “text”,
    ‘success’: function (data) {
    productos = data; //almacenamos los datos obtenidos en la variable productos
    }
    });
    //return productos; //retornamos la variable productos que contiene el array tipo json (el return aparece comentado devido a unas pruebas)
    alert(productos); //este alert imprime el array tipo jason que se le acaba de alamacenar a la variable productos
    })();
    alert(productos); //EL PROBLEMA ESTA ACA, CUANDO MANDAO A LLAMAR LA VARIABLE PRODUCTOS DESDE CUALQUIER OTRO LUGAR DE MI JS, SIMPLEMENTE NO ME DEVUELVE NADA, SOLO ME DESPLIEGA UN MENSAJE DE undefined

    Supuce que el problema era justamente porque la funcion ajax me devuelve informacion de manera asincrona, pero al cambiar el atributo false por true para que sea sincrona, igual sigo sin poder utilizar la variable en ninguna otra parte de mi .js

    Si fueras tan amable de ayudarme te lo agradeceria mucho! Saludos!

    • Miguel 22/10/2013

      aca te dejo la funcion sin comentarios para que sea un poco mas entendible, gracias.

      var productos = null;
      alert(productos);
      productos = (function () {
      $.ajax({
      ‘async’: false,
      ‘global’: true,
      ‘url’: ‘includes/topiclas_view.php’,
      ‘dataType’: “text”,
      ‘success’: function (data) {
      productos = data;
      }
      });
      //return productos;
      alert(productos);
      })();
      alert(productos);

  • Roberto 27/02/2014

    Tambien tengo un problema similar estoy usando jquery y quiero recuperar los valores que me envia el sevlet, y no tengo problema en ello, la cosa es que cuando quiera usar esos datos ya no funciona hasta el siguiente click en el boton que hace la accion.


    $("#btnAgregarCuentasHost").click(function(){
    var opciones=''
    $.post("AccionesHost.html", { accion:"retornarHosts", indice:"0"}, function(datos) {
    opciones=datos;
    return opciones;
    });
    var filas = idDisponibleCuentasHost();
    var strNueva_Fila='';
    var tags = ''+opciones+'';
    strNueva_Fila=''+
    ' ' +
    ''+
    ''+
    ''+tags+''+
    ''+
    ''+
    ''+
    '';
    var objTabla=$(this).parents().get(3);
    $(objTabla).find('tbody').append(strNueva_Fila);
    $("#jQueryTabs1").animate({height: '+=35px',},500)
    $("#jQueryTabs2").animate({height: '+=35px',},500)

    })

    si pongo un alert despues de la llave que cierra el post funciona al primer click tambien, que podra ser?

  • José Alvarado 20/01/2016

    Hola.
    Estoy haciendo un proyecto de la Uni y el $.POST no me devuelve ningún valor, si me pueden ayudar acá coloco el código 😉

    $(“#submit”).click(function(event){
    event.preventDefault();
    var idA=$(“#numero”).val();
    if (idA != “”) {
    $(“#gif”).show();
    var posteo = $.post(“lib/buscarAgencia.php”,{ab:idA});
    posteo.done(function(data) {
    $(“#gif”).hide();
    alert(ab);
    //$(“#buscAg”).click();
    $(“#numero”).val(“”);
    });
    }else{
    alert(‘No hay datos de búsqueda’);
    };
    });
    ———- El php ——-
    query($consultA);
    $row=$resultA->num_rows;

    if($row0){
    // Usuario Existe
    $fila = $resultA->fetch_array();

    }else{
    // Usuario ‘NO’ Existe
    $fila=”No se encontró Agencia”;
    };

    }
    return $fila;
    ?>

    Muchas gracias!!!

  • marcelo 13/02/2016

    Capy, estoy haciendo en modo aprendizaje una encuesta que consta de 80 preguntas con las mismas respuestas. Las preguntas las tengo en una bd de mysql. Tengo un archivo inicia_encuesta.php cuyo código en primer lugar indica por un if get que opera ante un href=”?siguiente=’.$columna[‘id_preguntas’].’+1″. Ambas partes con la misma estructura html. Mi intención es que me muestre las preguntas y que luego de seleccionar el radio button con las opciones de respuestas me pase a la siguiente y se guarde un array. El proceso de mostrar y pasar a la siguiente pregunta funciona pero no se como enviarlo a un array para luego volcarlo en otra db.
    Hice esto pero que carga la variable pero al pasar a la pregunta siguiente me vuelve a cargar con la opción elegida borrando la anterior:

    El código php:

    ‘”.$id_preg_sig.”‘ LIMIT 1″);
    if(mysql_num_rows($query_pregunta)>0){ /*si el numero de filas de la busqueda es mayor que 0 */
    while($columna = mysql_fetch_assoc($query_pregunta)){
    echo ‘

    ‘.$columna[‘preguntas’].’

    Totalmente de acuerdo
    Parcialmente de acuerdo
    Totalmente en desacuerdo
    Parcialmente en desacuerdo
    No sabe / No responde

    Siguiente

    ‘;
    }
    } else { /* si el numero es < 0 */
    header("Location: encuesta_completa.php");
    }
    }else{
    echo 'Debes seleccionar una pregunta';
    }
    } else{ /* si la variable pregunta NO existe entonces: */
    $valor = (int) mysql_real_escape_string($_POST['pregunta']);
    $query_pregunta = mysql_query("SELECT id_preguntas, preguntas FROM $db_table WHERE id_preguntas = '".$valor."' LIMIT 1");
    while($columna = mysql_fetch_assoc($query_pregunta)){

    ACA VA DE NUEVO LA ESTRUCTURA HTML CON
    Siguiente

    Soy novato me gustaria que me dieras si no es comprensible mi código una orientación de cómo lograr mi objetivo sin necesidad de que te explayes demasiado..

    Disculpá la molestia y agradezco tu opinión

    • capynet 14/02/2016

      Hola Marcelo. No entendí bien que necesitas. Creo entender que quieres mostrar una pregunta y un listado re radios para que el usuario marque la respuesta que crea correcta, y que al pinchar en “Siguiente”, se mande la respuesta de la pregunta actual y se cargue la siguiente pregunta con sus radios hasta llegar a la ultima pregunta.

      También entiendo que todo esto lo querés hacer con ajax no?

      Si es algo así lo que necesitas te dejo un ejemplo, sino explícamelo un poco mejor (sin código, con tus palabras mejor).

  • JuanCarlos 13/07/2016

    ¿Por qué no funciona?
    No me asigna el resultado del POST a una variable global, ¿alguna solución por favor?

    Mi código es el siguiente:

    var jsonDataEdo;
    var resultJsonEdo = “”;

    $(document).ready(function(){
    jsonDataEdo = dataEdo(20, 30);
    });

    function dataEdo(idA, idB)
    {
    $.post(urlDashboard + “/_dataEdo?idBpm=” + idBpm + “&idProdLine=” + idProdLine, function (data) {
    console.log(“dataSinAjax:”, data);
    resultJsonEdo = data;
    });
    return resultJsonEdo;
    }

  • Hola, yo tengo una duda similar . . .

    Tengo estas dos funciones, pero no logro sacar las variables de ellas . . .

    En este caso quiero usar las variables uUid y uUidAll para hacer una exclusión de la variable 1 en la variable 2 y obtener un arreglo 3 donde se hayan filtrado los elementos.

:).