从jQuery AJAX请求返回的数据创建自定义JavaScript对象

时间:2012-02-14 04:09:58

标签: javascript jquery ajax

我想创建一个自定义javascript对象,其中包含从jQuery AJAX请求返回的数据,但我不知道哪种方法是正确的。我想也许有一种方法可以在构造函数中包含AJAX请求,这样对象就像这样创建:

// Constructor function
function CustomObject(dataUrl) {
    var that = this;

    $.ajax(dataUrl, {
        success: function (json) {
            that.data = $.parseJSON(json);
        }
    });
}

// Creating new custom object
var myObject = new CustomObject('http://.....');

另一种方法可能是使用一个执行AJAX的函数,然后根据AJAX响应中的数据返回新对象。

function customObject(dataUrl) {
    // Constructor function
    function CustomObject(data) {
        this.data = data;
    }

    $.ajax(dataUrl, {
        success: function (json) {
            var data = $.parseJSON(json);
            return new CustomObject(data);
        }
    });
}

// Creating new custom object
var myObject = customObject('http://.....')

我想知道在做这样的事情时最好的做法是什么,以及不同方法的优点/缺点。也许你可以给我一些关于我想要做的事情的文章或例子。

提前致谢。

2 个答案:

答案 0 :(得分:5)

我认为这是一种更好的方法,它使您的CustomObject只了解它所包含的数据。在这里,您将创建对象的工作委托给工厂,并传递回调以获取对创建的对象的引用,因为ajax是异步的。如果你不介意让它同步,那么createCustomObject函数就可以返回实例,并且可以删除回调。

function CustomObject(data) {
    this.data = data;
}

var factory = (function(){
   function create(dataUrl, objectClass, callback){
       $.ajax({
           url: dataUrl,
           success: function (data) {
              callback(new objectClass(data));
            }
           });
   }
   return{
      createCustomObject: function(dataUrl, callback){
          create(dataUrl, CustomObject, callback);
      }
   };
})();

// Creating new custom object
var myObject = null;
factory.createCustomObject('http://..', function(customObject){
   myObject = customObject;
});

答案 1 :(得分:0)

我认为第二种方法更好,因为一旦脚本实际完全准备好(即它具有AJAX请求所需的数据),您只需创建一个新的CustomObject。< / p>