有一个ajax请求,它从spring服务中检索数据数组。
这是完整的代码段:
getData: function() {
var me = this;
var response = [];
Backbone.ajax({
url: 'http://localhost:8080/filters/clients',
success: function(result) {
this.response = me.getFilterValues(result);
console.log(this.response+" response");
}
});
return this.response;
},
这是从其他模型
调用此函数this.set('data', DataProvider.getData(/*pass all selected values here*/));
正如您在成功的ajax请求中看到的那样,它返回数据并将其传递给其他函数,该函数返回一个数组,然后用于呈现视图。经过一些调试后,我注意到,当这个set语句被调用时,ajax被跳过,因此返回undefined值。经过一段时间,当它试图访问这个未定义的数据对象时,它最终成功地执行了这个ajax,但此时为时已晚。
为什么呢?是因为它的异步和第一次获取请求被发送而没有任何等待它直接进入下一部分代码或什么?调试显示,第一次来到ajax时,它只获取名称和返回行。
答案 0 :(得分:0)
您需要使用回调,在请求仍处理时return
正在被点击。以下是重构的方法:
getData: function(callback) {
var me = this;
Backbone.ajax({
url: 'http://localhost:8080/filters/clients',
success: function(result) {
callback(me.getFilterValues(result));
}
});
},
和二传手:
DataProvider.getData(function(data) {
//data is the response from your AJAX call
this.set('data', data); //'this' may be the wrong context here.
});