Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

122
Vistas
No se pueden asignar datos de json de dominio cruzado a una variable en Ajax

Soy un novato en Ajax, estoy tratando de obtener datos usando la funcionalidad de dominio Ajax Cross. La función Ajax se llama desde test.php que llama a stats.php para solicitar datos

Estadísticas.php

 <?php $data = array(); $data[0]=1; $data[1]=1; echo json_encode($data); ?>

Prueba.php

 <html> <head> <script src="./lib/jquery.min.js"></script> <script> var var0=0; $(document).ready(setInterval(function() { $.ajax({ cache: false, type: "GET", url: "http://10.0.0.2/dashBoard/stats.php", data: "", dataType: "jsonp", crossDomain: true, jsonpCallback: 'callback', contentType: "application/json; charset=utf-8", success: function(data){ console.log(window.var0 = data[0]); } }); }, 1000)); $(document).ready(setInterval(function() { document.getElementById("p1").innerHTML = window.var0; },1000)); </script> </head> <body> <p id="p1"></p> </body> </html>

test.php está en 10.0.0.1 stats.php está en 10.0.0.2

Ajax puede llamar a stats.php y puedo ver la respuesta json pero no puedo usar estos datos de respuesta en test.php. No puedo asignar el valor data[0] , que es 1 según stats.php a window.var0 en test.php, que es una variable global. Sin embargo, esto funciona perfectamente bien cuando stats.php está en 10.0.0.1 junto con test.php, pero mi requisito es cargar datos de stats.php en 10.0.0.2.

Por favor ayuda.

Gracias por adelantado.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su problema es que desacopla la función que trae los datos del servidor y la función que toma esos datos y cambia el DOM en función de la respuesta del servidor. Además, está ejecutando ambas funciones al mismo tiempo. Esto significa que la función que cambia el DOM se activará antes de que regrese la respuesta del servidor.

El objetivo principal de usar un $ajax es saber cuándo ha regresado la respuesta, por lo que podría usar esos datos. Al colocar $.ajax en una función y lo que hace con la respuesta en otra, rompe este comportamiento de "esperar a que lleguen los datos". El propósito completo de la función de success es que se ejecuta cuando la respuesta ha regresado con éxito. En success ya tienes los datos. Así que úsalo para cambiar DOM directamente:

Usa esto en su lugar:

 $(document).ready(setInterval(function() { $.ajax({ cache: false, type: "GET", url: "http://10.0.0.2/dashBoard/stats.php", data: "", dataType: "jsonp", crossDomain: true, jsonpCallback: 'callback', contentType: "application/json; charset=utf-8", success: function(data){ document.getElementById("p1").innerHTML = data[0]; } }); }, 1000));

No puedo estar seguro, ya que no conozco el contexto, pero lo más probable es que ahora pueda eliminar de forma segura el contenedor de tiempo de espera. No tiene sentido retrasar la llamada de datos, ¿verdad?

 var var0; function updateP1(){ document.getElementById("p1").innerHTML = var0; } $(document).ready(function() { $.ajax({ cache: false, type: "GET", url: "http://10.0.0.2/dashBoard/stats.php", data: "", dataType: "jsonp", crossDomain: true, jsonpCallback: 'callback', contentType: "application/json; charset=utf-8", success: function (data) { var0 = data[0]; updateP1(); } }); });
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda