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

我想创建一个自定义的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://.....') 

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

提前致谢。

我认为这将是一种更好的方法,它使您的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; }); 

我认为第二种方法更好,因为只有在脚本实际完全准备好这样做时才会创建一个新的CustomObject (即它具有AJAX请求所需的数据)。