JavaScript получить значение из функции - PullRequest
0 голосов
/ 13 марта 2012

Как получить токен в function?Я хочу отправить его из этой функции для обработки ajax.

<body>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
    var token;
    window.fbAsyncInit = function() {
        FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true});
        FB.getLoginStatus(function(response) {
            if (response.authResponse){
                       if(response.status=="connected") {
                                token = response.authResponse.accessToken;
                       }
            }
        });
    };
    alert(token);//undefined
</script>
<div id="fb-root"></div>
</body>

Ответы [ 5 ]

4 голосов
/ 13 марта 2012

Вы выполняете асинхронный запрос, который может быть не завершен к моменту выполнения вашего оповещения.Чтобы устранить проблему, просто вызовите функцию после завершения асинхронного метода:

var token;
window.fbAsyncInit = function() {
    FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true});
    FB.getLoginStatus(function(response) {
        if (response.authResponse){
                   if(response.status=="connected") {
                            token = response.authResponse.accessToken;
                            asyncComplete();
                   }
        }
    });
};

function asyncComplete() {
    alert(token);
}

Или просто передайте значение вместо использования переменной token:

window.fbAsyncInit = function() {
    FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true});
    FB.getLoginStatus(function(response) {
        if (response.authResponse){
                   if(response.status=="connected") {
                            asyncComplete(response.authResponse.accessToken);
                   }
        }
    });
};

function asyncComplete(token) {
    alert(token);
}
3 голосов
/ 13 марта 2012

это асинхронный вызов, то есть вызывается функция ur, и сценарий не ждет, пока она не вернется, перед выполнением следующего оператора alert, в результате чего значение токена там будет «неопределено».

Что вы можетесделать, это вызвать функцию, которую вы хотите вызвать, как,

var token;
    window.fbAsyncInit = function() {
        FB.init({ appId: 'XXXXXXXX',status: true,cookie: true,xfbml: true,oauth: true});
        FB.getLoginStatus(function(response) {
            if (response.authResponse){
                       if(response.status=="connected") {
                                token = response.authResponse.accessToken;
                                alert(token);//should give correct value here
                                newFunction(token);
                       }
            }
        });
    };
0 голосов
/ 13 марта 2012

Вызовите вашу функцию, когда этот вызов AJAX завершится ...

if(response.status=="connected") {
    token = response.authResponse.accessToken;
    YourFunction(token);
}
0 голосов
/ 13 марта 2012

Переменная token назначается асинхронно, поэтому она доступна только после того, как запрос отправлен на Facebook для проверки и ответ отправлен обратно. Если вам нужно запустить какие-либо другие функции, для которых токен уже установлен, вызовите их со строки:

token = response.authResponse.accessToken;
doSomeOtherFunction(token);
0 голосов
/ 13 марта 2012

Вы не инициализировали токен, и когда вы попытались инициализировать его, вы сделали это в блоке if.Так что одно из ваших утверждений if проваливает свою проверку if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...