我想从ajax成功函数中为类实例变量赋值,代码会更好地解释我的意思。
var SomeClass = function() {
this.someMethod = function() {
$.ajax({
method: 'GET',
url: 'http://example.com',
success: function(resp) {
var js = JSON.parse(resp);
// I want to assign js object to SomeClass.response instance variable
};
});
};
};
如果我试试这个。回应,它显然不起作用。如果我在进行ajax调用之前将其分配给某个变量,它也不起作用。我的意思是:
var SomeClass = function() {
this.someMethod = function() {
// Asign this to self
var self = this;
$.ajax({
method: 'GET',
url: 'http://example.com',
success: function(resp) {
var js = JSON.parse(resp);
// I want to assign js object to SomeClass.response instance variable
self.response = js; // However it doesn't work
};
});
};
};
我很感激你的帮助!!!
答案 0 :(得分:1)
由于AJAX是异步的,因此在AJAX调用完成之前,您无法使用someVariable.response
。适当的方法是让someMethod
进行回调:
var SomeClass = function() {
this.someMethod = function(callback) {
// Asign this to self
var self = this;
$.ajax({
method: 'GET',
url: 'http://example.com',
success: function(resp) {
var js = JSON.parse(resp);
// I want to assign js object to SomeClass.response instance variable
self.response = js;
callback();
};
});
};
};
然后你会像这样使用它:
var someVariable = new someClass;
someVariable.someMethod(function() {
console.log(someVariable.response);
});
答案 1 :(得分:1)
虽然@Barmar解决方案可行,但我认为它只是使用promises的最佳方式..而且由于你已经使用jQuery,这很容易。见下文:
var SomeClass = function() {
this.someMethod = function() {
return $.ajax({
method: 'GET',
url: 'http://example.com'
});
};
};
然后你做这样的事情:
var someVariable = new SomeClass();
someVariable.someMethod().then(function(returnedValue){
console.log(JSON.parse(returnedValue));
});
我相信承诺是要走的路,因为它们将被纳入ES6 ......更好地熟悉这个概念。