我在我的应用程序中使用Backbone.js和jQuery 1.7,我在构建集合时遇到了一些问题。在集合中我有方法,它应该返回一些对象。我在$ .ajax(...)success()函数中“返回”。
在这种情况下,我收到“undefined”而不是预期的对象。我明白,问题在于“返回” - 它使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);
},
});
}
});
答案 0 :(得分:3)
“我应该在哪里放置return语句”
无处。您无法返回异步 AJAX请求的结果。
任何依赖于data
的代码都必须在 {@ 1}}回调中被称为。
一种可能性是让您的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