Почему эта глобальная переменная не изменяется? - PullRequest
0 голосов
/ 15 февраля 2011

Почему этот параметр обнуляется, а не устанавливается на данные, возвращаемые при вызове ajax? Это должно быть что-то простое, что я пропускаю.

var message;

$(document).ready(function(){
    fbFetchMessage();
    alert(message);
});

function fbFetchMessage(){
    var url = "http://graph.facebook.com/companyname/feed?callback=?";  
        $.getJSON(url,function(json){
            message = json.data[0].message;
        });
}

Ответы [ 2 ]

7 голосов
/ 15 февраля 2011

сообщение означает , но после вы вызываете оповещение

, попробуйте этот код и убедитесь сами:

var message;

$(document).ready(function(){
    fbFetchMessage();
    alert(message);
});

function fbFetchMessage(){
    var url = "http://graph.facebook.com/companyname/feed?callback=?";  
        $.getJSON(url,function(json){
            message = json.data[0].message;
            alert("really it gets changed:"+message);
        });
}
4 голосов
/ 15 февраля 2011

$.getJSON как и любой другой .ajax() (на самом деле, AJAX в целом) работает асинхронно (по умолчанию).

Это означает, что вы пытаетесь предупредить message до ваш обработчик успеха может определить его.

Чтобы решить эту проблему, вы можете использовать jQuerys Deferred help объекты (если выИспользуешь 1.5.0 +)

$(document).ready(function(){
    fbFetchMessage().done(function(json) {
        alert(json.data[0].message); // data will also be the result which was returned
    });
});

function fbFetchMessage(){
    var url = "http://graph.facebook.com/companyname/feed?callback=?";  
    return $.getJSON(url);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...