我有一个对象
var actions = {
'photos': function()
{
var self = this; // self = actions
$.get('./data.php?get=photos', function(data)
{
self.result = data;
});
},
'videos': function()
{
var self = this;
$.get('./data.php?get=videos', function(data)
{
self.result = data;
});
}
};
每个函数在actions
中再创建一个名为result
然后,我使用这个(工作得很好)代替switch
:
if (actions[action])
{
actions[action](); // call a function
console.log(actions);
console.log(actions.result);
}
action
是一个值为photos
或videos
的变量。
console.log(actions)
给出了这个:
Object
message: function ()
messages: function ()
profile: function ()
profile-edit: function ()
result: "<div>...</div>"
__proto__: Object
所以我认为result
中actions
项的值为"<div>...</div>"
。
但,console.log(actions.result)
返回 undefined
。
为什么吗
我知道所有这些代码都可以重写,但我想了解undefined
的原因。
答案 0 :(得分:3)
因为我们正在处理异步请求,所以我们使用“回调”。
异步请求就绪时调用回调。您的请求将得到响应,并通过回调发送该响应。回调处理响应。
var actions = {
'photos': function(callback)
{
$.get('./data.php?get=photos', callback);
},
'videos': function(callback)
{
$.get('./data.php?get=videos', callback);
}
};
var action = 'photos';
actions[action](function(data) {
console.log(data);
});
由于你保留了这些值,我会使用这个结构:
var actions = {
'photos': function()
{
$.get('./data.php?get=photos', function() {
this.__callback('photos', data);
});
},
'videos': function()
{
$.get('./data.php?get=videos', function() {
this.__callback('videos', data);
});
},
'__callback': function(action, data) {
this.results[action].push(data);
},
'results': {
'photos': [],
'videos': []
}
};
var action = 'photos';
actions[action]();
// use a timeout because we are dealing with async requests
setTimeout(function() {
console.log(actions.results); // shows all results
console.log(actions.results.photos); // shows all photos results
console.log(actions.results.videos); // shows all videos results
}, 3000);
gaaah多么可怕的代码...