将$ .getJSON的结果传递给同一个类的另一个方法

时间:2015-08-25 17:01:29

标签: javascript jquery ajax class methods

我有一个JavaScript类,想要将$ .getJSON的结果传递给同一个类的另一个方法,并从类外部访问它。我的错误在哪里?

我的代码类似于:

function MyClass() {
    var mydata = false;

    this.getData = function() {
        $.getJSON( "/api/get.php", function(data) {
            this.setData(data);
        });
    }

    this.setData = function(data) {
        this.mydata = data;
        this.logData();
    } 

    this.logData = function() {
        console.log(this.mydata);
    }   

    this.returnData = function() {
        return this.mydata;
    } 
}

var MyClass = new MyClass();
MyClass.getData();
var data = MyClass.returnData();

首先,我想创建一个类的实例并从服务器获取数据。然后方法setData应验证结果,将其存储在变量中并将结果记录到控制台。在此之后,我想从课外访问数据。

2 个答案:

答案 0 :(得分:1)

每个函数中的

this更改,因此您可以将this存储在变量中:

function MyClass() {
    var mydata = false, that = this;

    this.getData = function() {
        $.getJSON( "/api/get.php", function(data) {
            that.setData(data);
        });
    }

    this.setData = function(data) {
        that.mydata = data;
        that.logData();
    } 

    this.logData = function() {
        console.log(that.mydata);
    }   

    this.returnData = function() {
        return that.mydata;
    } 
}

var MyClass = new MyClass();
MyClass.getData();
var data = MyClass.returnData();

答案 1 :(得分:0)

试试这个:

    function MyClass(){

var setValue="",logValue="";

var getJSON = function(setDatafunc){
    $.getJSON( "http://demo3913311.mockable.io/mytestdata", function(data) {
        setDatafunc(data);
    });
}

var getData = function(){
    return getJSON(setData);
}

var setData = function(data) {
         setValue = (data)? data: (setValue)? setValue : 'undefined'
         logData(setValue);
} 

var logData= function(data){
    logValue = (data)? data: (logValue)? logValue : 'undefined'
    console.log('12',logValue)
    return logValue;
}

var returnData = function(){
    return logValue;
}



return {

    get: getData,
    set: setData,
    //log: logData
    doReturn : returnData
}

}

var MyClass = new MyClass();
MyClass.get()
MyClass.doReturn();