2012-02-14 67 views
2

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

// 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://.....') 

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

在此先感谢。

+0

为什么要创建一个对象?另外,阅读这个由3部分组成的系列文章,帮助我在JavaScript中进行了不同的思考 - http://enterprisejquery.com/2010/10/how-good-c-habits-can-courage-bad-javascript-habits-part-1/ – 2012-02-14 04:20:06

+0

从服务器端返回一个JSON与你已经想要的对象结构和数据有什么关系? – 2012-02-14 05:24:15

+0

我正在创建一个对象,因为它具有自定义方法 – VerizonW 2012-02-14 16:03:09

回答

0

我认为第二种方法更好,因为一旦脚本实际上完全准备好了(即它具有它从AJAX请求中需要的数据),您只能创建一个新的CustomObject

5

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

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