Получить переменную json-запроса вне функции (jquery) - PullRequest
2 голосов
/ 22 июня 2011

Я чувствую себя довольно глупо, спрашивая это, но как я могу получить переменную crdnts вне функции

$(function() {
    var coordinates = {
        LoadDefault: function() {
             $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) {
                var crdnts = json.latitude + "," + json.longitude;
                //alert(crdnts);//this works
                return crdnts;
            });
        }
    };
    alert(coordinates.LoadDefault());//I would like to get the crdnts variable here.
});

или

http://jsfiddle.net/stofke/Lv3YD/

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

javascript ajax является асинхронным. поэтому вам нужно использовать обратные вызовы:

$(function() {
    var coordinates = {
        LoadDefault: function() {
             $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) {
                var crdnts = json.latitude + "," + json.longitude;
                call_alert(crdnts); //callback
            });
        }
    };
    function call_alert(cr){
         alert(cr);
    }
    coordinates.LoadDefault();
});
2 голосов
/ 22 июня 2011

Вы не можете. Ваш Ajax-вызов асинхронный, поэтому вы не можете предсказать, когда он вернется.

Единственное, что вы можете сделать, это сделать что-то с ним в обратном вызове успеха, или установить ваш Ajax синхронным , если это выбор (в этом случае все выполнение JS будет ждать, пока запрос не будет закончил).

Например, вы можете вызвать функцию, когда вызов Ajax успешно завершен:

$(function() {
    var coordinates = {
        LoadDefault: function() {
             $.getJSON('http://api.wipmania.com/jsonp?callback=?', '', function(json) {
                var crdnts = json.latitude + "," + json.longitude;
                callSomething(crdnts);
            });
        }
    };

    function callSomething(x) {
        alert(x);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...