Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

120
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!