我在应用程序中使用Backbone.js和jQuery 1.7,在构建集合时遇到一些问题。在集合中,我有方法,该方法应该返回一些对象。我在$ .ajax(...)success()函数中“返回”。
在这种情况下,我收到“未定义”而不是预期的对象。我了解,问题出在“返回”中-它使success()函数返回一些值。但是我需要getDomainZones()方法返回。我该怎么做?
window.DmnList = Backbone.Collection.extend({
model: DmnItem,
localStorage: new Store("hosting.WhoIs"),
destroyAll: function (options) {
while (this.models.length > 0) {
this.models[0].destroy(options);
}
},
getDomainZones: function(){
$.ajax({
url: 'http://hosting/rest/getDomains',
type: 'GET',
dataType: 'json',
cache: 'false',
timeout: 5000,
success: function(data) {
console.log(data);
return data;//problem here
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error[getDomainZones]: " + textStatus);
console.log(jqXHR);
},
});
}
});
最佳答案
“我应该在哪里放置退货单”
无处。您无法返回异步AJAX请求的结果。
任何依赖data
的代码都必须在success
回调内部调用。
一种可能是让您的getDomainZones
方法接收一个函数,该函数将在收到响应时被调用。
getDomainZones: function( callback ){
$.ajax({
url: 'http://hosting/rest/getDomains',
type: 'GET',
dataType: 'json',
cache: 'false',
timeout: 5000,
// success: callback, // alternative if there's no other work to do.
success: function(data) {
console.log(data);
callback( data ); // invoke the function received
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error[getDomainZones]: " + textStatus);
console.log(jqXHR);
},
});
}
因此,然后您将一个函数传递给
getDomainZones
,并且在收到响应时,getDomainZones
将调用您传递的函数,并将其传递给data
。getDomainZones( function( d ) {
// do something with the data
console.log( d );
});