Ver*_*onW 2 javascript ajax jquery
我想创建一个自定义的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://.....');
Run Code Online (Sandbox Code Playgroud)
另一种方法可能是使用一个执行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://.....')
Run Code Online (Sandbox Code Playgroud)
我想知道在做这样的事情时最好的做法是什么,以及不同方法的优点/缺点.也许你可以指点我的一些文章或例子,类似于我想要做的事情.
提前致谢.
我认为这将是一种更好的方法,它使您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;
});
Run Code Online (Sandbox Code Playgroud)