如何将ajax调用的结果作为函数的返回值返回

时间:2014-03-13 00:07:04

标签: javascript jquery ajax asynchronous coffeescript

我有一个类,它有一个从服务器获取内容的方法。我试图找到一种方法来回归"某些东西"来自后来"成为"的功能服务器响应的数据。以下是这个想法:

@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)

我认识到这与承诺的概念类似,我只是模糊地熟悉它。我在这里找不到什么东西?

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();
    }
});