jQuery getJSON guardar el resultado en la variable [duplicar]

81

Utilizo getJSON para solicitar un JSON desde mi sitio web. Funciona muy bien, pero necesito guardar la salida en otra variable, como esta:

var myjson= $.getJSON("http://127.0.0.1:8080/horizon-update", function(json) {

                 });

Necesito guardar el resultado, myjsonpero parece que esta sintaxis no es correcta. ¿Algunas ideas?

2
74

No puede obtener valor al llamar getJSON, solo después de una respuesta.

var myjson;
$.getJSON("http://127.0.0.1:8080/horizon-update", function(json){
    myjson = json;
});
4
  • 6
    El problema con esto es que var myjsonno está disponible en la siguiente línea debido a problemas de sincronización. 2 abr 13 a las 13:48
  • 2
    @JanDvorak Sí, la solicitud se ejecuta de forma asincrónica, si necesita jsondatos para continuar, debe llamar a otro código después de configurar la myjsonvariable. Como solución, podría ser como 'callbackFuncWithData' de la respuesta de Ravi O simplemente llamar a otra función. 2 abr 13 a las 14:10
  • 1
    Una vez que hagas eso, realmente no hay razón para mantenerte myjsondeclarado afuera. Simplemente páselo a la devolución de llamada como argumento. 2 abr 13 a las 14:17
  • @JanDvorak A veces es necesario, por ejemplo, cuando se utiliza el filtrado de clientes. Depende de la lógica de su aplicación. 2 abr 13 a las 14:24
24

$ .getJSon espera una función de devolución de llamada, ya sea que la pase a la función de devolución de llamada o en la función de devolución de llamada la asigne a la variable global.

var globalJsonVar;

    $.getJSON("http://127.0.0.1:8080/horizon-update", function(json){
               //do some thing with json  or assign global variable to incoming json. 
                globalJsonVar=json;
          });

En mi opinión, lo mejor es llamar a la función de devolución de llamada. que es más agradable a los ojos, aspectos de legibilidad.

$.getJSON("http://127.0.0.1:8080/horizon-update", callbackFuncWithData);

function callbackFuncWithData(data)
{
 // do some thing with data 
}
4
  • 5
    No creo que la primera solución funcione. .getJSON es asincrónico, por lo que no podrá acceder a ninguna variable externa. Lo que debe hacer es establecer async: false en ajax de bajo nivel
    lngs
    2 abr 13 a las 13:35
  • 3
    @lngs: No, funcionará. La función de devolución de llamada es un cierre y tiene acceso a todas las variables definidas en ámbitos superiores. Usted todavía tiene que tener cuidado sin embargo , cuando acceder a la variable, es decir, no se puede acceder a él inmediatamente después de realizar la llamada a $.getJSON. En ese caso, realmente tendría que realizar una solicitud sincrónica. 2 abr 13 a las 13:36
  • 2
    Entonces, ¿cómo podría saber cuándo finaliza la llamada ajax y qué tan grandes son los datos de respuesta? Aún necesita usar la función de devolución de llamada para hacerlo.
    lngs
    2 abr 13 a las 14:28
  • 2
    Sí, ¿cómo puede saber cuándo puede acceder a los datos? 26 oct 2017 a las 16:59