2012-02-23 2 views
1

Это простой скрипт для получения сеанса «CouchDB» и получения информации о пользователе. В нем используется «couch.j», который использует «jQuery». Я использую JavaScript некоторое время, но я не могу понять, как передать возвращаемые значения, а затем использовать их.Функция Javascript, возвращающая объект сеанса

$(document).ready(function() { 
    this.ctx = getCtx(); //it doesn’t appear that this is actually assigning a variable 
    console.log(this.ctx); //this returns “undefined” 
}); 

function getCtx(){ 

    $.couch.session({ 
     async: false, 
     success: function(r) { 

       ctx = r.userCtx; 
       if (ctx != null){ //I added this check because otherwise ctx was returning undefined. 

        console.log("returning ctx: "+ctx); 
//Log says: returning ctx: [object Object] 
        return ctx;       
//I know this is returning an object, because of the line above 

       } 
     } 
    }); 
}; 

Что топал меня еще больше в том, что console.log заявление в функции $(document).ready возвращается «неопределенным» до console.log заявления в getCtx() функция возвращает. Это означает, что он не дает времени для выполнения и фактически получает сеанс.

+0

вам нужна функция успеха, чтобы установить локальную varaible в func getCtx, чтобы она могла ее вернуть, вы получаете точечный ток getCtx ничего не возвращает. – Dampsquid

ответ

2

Вы можете переместить задание функции успеха вызова AJAX, как так

$(document).ready(function() { 
    getCtx(this);  
}); 

function getCtx(obj){ 

    $.couch.session({ 
     async: false, 
     success: function(r) { 

       ctx = r.userCtx; 
       if (ctx != null){   

        console.log("returning ctx: "+ctx); 
        obj.ctx = ctx;       

       } 
     } 
    }); 
}; 
+0

Итак, я попытался сделать то, что вы предлагаете, но если я добавлю что-нибудь еще в функцию $ (document) .ready, они попытаются выполнить перед getCtx (this) ;. Например, если я поставлю «console.log (this.ctx);» утверждение после 'getCtx (this);' на выходе будет два журнала, один «неопределенный», а затем один «возврат ctx: [object Object]». Кажется, это связано с порядком, в котором работает компиляция/интерпретация JavaScript, но я этого не понимаю. –

+0

Спасибо всем за вашу помощь. –

0

Try:

$(document).ready(function() { 
    var ctx = getCtx(); 
    console.log(ctx); 
}); 
1

Вам нужно назначить CTX вар внутри функции успеха вместо возвращения значение

Смежные вопросы