Javascript类中的AJAX调用(原型函数)

时间:2014-08-14 13:02:48

标签: javascript jquery ajax oop

我正在实现一个Javascript类,我无法上班。 在初始化类的实例之后,我然后调用该类的方法来生成AJAX请求。成功返回的数据'然后需要将AJAX函数设置为该实例的属性。当我在代码中稍后输出this.results变量时,它应该是空的。这是我的代码:

//Individual Member Class
function GetReports(options) {  
    this.options = options;
    this.results = {};
}

GetReports.prototype.getResults = function() {
    jQuery.ajax({
        type      :  'post',
        dataType  :  'json',
        url       :  'reporting/getStaffMemberReports',
        async     :  false,
        data      :  options,
        success   :  function(data) {
            this.results = data;
            setResult(this.results);
        }
    }); 
}

GetReports.prototype.returnResults = function(type) {   
    if(type === "JSON") {       
        JSON.stringify(this.results);
    } else if (type === "serialize") {
        this.results.serialize();
    }
return this.results;
};

GetReports.prototype.setResult = function(data) {
    this.results = data;
};

我的代码创建了'类':

的实例
var jsonString = <?php echo json_encode($JSONallocatedStaffMembers); ?>;
    options = {
        all     : true,
        members : JSON.parse(jsonString),
        type    : 'highperform'
    };
    var all = new GetReports(options);
    all.getResults();
    var results = all.returnResults("JSON");
    console.log(results);

现在,由于AJAX调用是异步的,我认为这可能是问题所在?我试过把'async:false,&#39;但这并没有帮助。 谁能看到我错在哪里?

1 个答案:

答案 0 :(得分:9)

这里有一件事需要解决。

this

  里面的ajax回调是指ajax对象,而不是你的   GetReport实例。你必须在getResults和point上声明一个var   在制作ajax之前要做到这一点。

GetReports.prototype.getResults = function() {
    var self = this;
    jQuery.ajax({
        type      :  'post',
        dataType  :  'json',
        url       :  'reporting/getStaffMemberReports',
        async     :  false,
        data      :  options,
        success   :  function(data) {
            self.results = data;
            setResult(self.results);
        };
    }); 
}