我有一个类,它有一个从服务器获取内容的方法。我试图找到一种方法来回归"某些东西"来自后来"成为"的功能服务器响应的数据。以下是这个想法:
@find: (id) ->
response = THING
$.ajax
type: 'GET'
url: "#{this::url}/#{id}"
dataType: 'json'
success: (data) =>
response.become @init(data)
error: (xhr, status, error) ->
response.reject error
response
使用此方法如下所示:
myBlah = Product.find(1)
我认识到这与承诺的概念类似,我只是模糊地熟悉它。我在这里找不到什么东西?
答案 0 :(得分:1)
尝试将$ .ajax的'async'选项设置为false。如果可能的话尝试使用回调。我为这两种情况添加了一个解决方案。
var Product = {};
Product.find = function(id) {
var response;
$.ajax({
async: false,
type: 'GET',
url: "/product/" + id,
dataType: 'json',
success: function(data) {
response = new ProductModel(data);
},
error: function(xhr, status, error) {
response = null;
}
});
return response;
};
var myProduct = Product.find(1);
if (myProduct != null) {
myProduct.getPrice();
}
上面的代码如何使用回调函数工作。
var Product = {};
Product.find = function(id, callback) {
$.ajax({
type: 'GET',
url: "/product/" + id,
dataType: 'json',
success: function(data) {
var response = new ProductModel(data);
if (typeof callback != 'undefined') {
callback(response);
}
},
error: function(xhr, status, error) {
if (typeof callback != 'undefined') {
callback(null);
}
}
});
};
Product.find(1, function(myProduct) {
if (myProduct != null) {
myProduct.getPrice();
}
});