I am implementing a Javascript class which I am having trouble getting to work. After I initialize an instance of the class, I then call a method of that class which makes an AJAX request. The data that is returned on 'success' of the AJAX function is then needed to be set to the a property of that instance. When I output the this.results variable later in my code, it is empty when it shouldn't be. Here is my code:
我正在实现一个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;
};
And my code which creates an instance of the 'class':
我的代码创建了'class'的实例:
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);
Now, as the AJAX call is asynchronous, I was thinking this may be the issue? I have tried putting 'async : false,' in but that doesn't help. Can anyone see where I am going wrong?
现在,由于AJAX调用是异步的,我认为这可能是问题所在?我尝试过'async:false',但这没有用。任何人都可以看到我错在哪里?
1 个解决方案
#1
7
There is one thing to be fixed here.
这里有一件事需要解决。
The this
inside ajax callback refers to ajax object, and not your GetReport instance. You have to declare a var on getResults and point it to this before make the ajax.
在ajax内部回调是指ajax对象,而不是你的GetReport实例。你必须在getResults上声明一个var并在创建ajax之前将其指向this。
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);
};
});
}
#1
7
There is one thing to be fixed here.
这里有一件事需要解决。
The this
inside ajax callback refers to ajax object, and not your GetReport instance. You have to declare a var on getResults and point it to this before make the ajax.
在ajax内部回调是指ajax对象,而不是你的GetReport实例。你必须在getResults上声明一个var并在创建ajax之前将其指向this。
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);
};
});
}