我正在尝试将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
我在两分钟内重构了我的代码并得到了我需要的结果。
答案 0 :(得分:0)
在您的代码Product.myobj
中始终为undefined
,除非jQuery.getJSON
success
被调用
由于您在运行console.log
函数后立即调用Product.getval
,因此会在回调之前因网络延迟而执行。