0

Este es el codigo que estoy usando, (ya llamo las libreria de jquery), pero por algun motivo no puedo pasar el objecto a una variable global que pueda usar en otra funcion, a que se debe?

$(document).ready(function () {
   let variableglobal;
  // e.preventDefault();
  var datos = {
    'id_examen' : "1"
  };
  $.ajax({
    url: "traerdatos.php",
    type: "POST",
    data: datos,

    success: function (data) {
      var jsonData = JSON.parse(data);
      console.log(jsonData);

      variableglobal=jsonData;
    },
    error: function () {
      console.log("error");
    },
  });

Al momento de querer imprimir me sale indefinida

  console.log(variableglobal);
});

Aqui el archivo traerdatos.php

<?php
    
    $conexion = mysqli_connect("localhost", "root", "", "imagenes");
    
    $id_examen=$_POST['id_examen'];
    // $id_examen="1";

    $sql = $conexion ->query("SELECT * FROM `imagen` WHERE `id_examen` ='".$id_examen."' ");
    $result = $sql->fetch_all(MYSQLI_ASSOC);

    $count = count($result);

    echo json_encode(array($result));
   
?>
  • Hola @Diego, ¿podrías colgar el archivo `traerdatos.php` en un hosting gratuito o compartir su código acá? – David E. Luna M. Apr 13 '21 at 21:53
  • Esto ocurre porque las peticiones Ajax son asíncronas. Si tú asignas una variable en el `success` y más adelante intentas usar esa variable, puede que no esté aún asignada porque la petición aún no ha terminado. Para evitar eso tienes varias opciones, una no recomendadas, como hacer que la petición no sea asíncrona (te recomiendo que no hagas eso). Otra posibilidad es crear una función que sirva de callback y pasar `data` a esa función desde dentro del `success` con algo como esto: `mCallBack(data);` habiendo definido `function mCallBack(data) { //Aquí puedes usar data }` ... – A. Cedano Apr 13 '21 at 22:35
  • Puedes usar también Promesas y otras cosas. Te sugiero que revises [esta pregunta](https://es.stackoverflow.com/q/1539/29967) y sus respuestas. Allí algunos sugieren lo que te advertí antes, hacer la petición no asíncrona. Parece más simple eso, pero podría tener consecuencias terribles, como que el código se quede frizado mientras la petición Ajax se procesa. Por último decir que en jQuery `document.ready` es obsoleto, lo mismo que `success` y `error`. Deberías usar en su lugar `function` simplemente para el 1er caso y para 2º `done` y `fail` que además implementan un tipo de Promesa. – A. Cedano Apr 13 '21 at 22:37
  • Creo que debes cambiar `let variableglobal;` por `var variableglobal = [];` – Jhon Maldonado Apr 13 '21 at 22:53

0 Answers0