如何将AJAX调用封装为Javascript对象属性的属性

时间:2014-04-30 21:07:47

标签: javascript jquery ajax encapsulation

我正在尝试将AJAX调用封装在一个对象中,并且通过跟踪这里的线程,我已经能够创建一个具有两个属性Product(函数)的对象(getval)对于AJAX调用)和myobj(包含AJAX调用结果的对象)。当我控制日志记录Product对象时,它会显示具有预期属性的两个属性。但是,当我只控制日志Product.myobj属性时,它会返回undefined。所以,我的第一个问题是为什么我得到一个未定义的?而第二个这是一个hacky方法并且有更好的方法吗?。感谢新手,这是我的代码:

var url = "http://mazihealth.com";

function callback(data) {}
var Product = {
    getval: function (url, callback) {
        $.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent(url) + '&callback=?', function (data) {
            callback($(data.contents));
        });
    }
};
Product.getval(url, function (data) {
    Product.myobj = data.filter('div').children();
    console.log(Product.myobj); //Object[5]
});
console.log(Product) //Object with 2 properties
console.log(Product.myobj); //undefined

更新代码: 我修复了回调,现在在回调函数中创建Product.myobj。有没有办法将回调函数封装在Product对象中以创建Product.myobj属性?

var url = "http://mazihealth.com";  
var Product = {getval:function(url, callback) {                      $.getJSON('http://whateverorigin.org/get?url=' +    encodeURIComponent(url) + '&callback=?', callback);
    }
};

function callback(data) {
  Product.myobj = $(data.contents).filter('div').children();
};

Product.getval(url, callback);
console.log(Product)  //Object with 2 properties

回答我在这里找到的问题: Using $.getJSON() with callback within a Javascript object

我在两分钟内重构了我的代码并得到了我需要的结果。

1 个答案:

答案 0 :(得分:0)

在您的代码Product.myobj中始终为undefined,除非jQuery.getJSON success被调用

由于您在运行console.log函数后立即调用Product.getval,因此会在回调之前因网络延迟而执行。