我有这个基本的JavaScript代码作为一个迷你文件管理器项目的一部分,我为了好玩,但不幸的是它不起作用。在get()
函数内部,我试图访问Content.files
数组,但似乎由于变量的作用域或函数内部的任何内容,它没有正确设置数组,也没有任何内容出现在页面上。 Firefox的错误控制台一点也不给我。我该如何解决?JavaScript和对象访问
顺便说一句,最近我一直专注于C#和PHP,所以原谅我,如果它只是一个愚蠢的语法错误。谢谢!
<script type="text/javascript">
Page = {
currentdir: '/',
}
Content = {
files:[], folders:[],
get: function() {
$.post('?p=myfiles&ajax', {
dir: '/',
}, function (data) {
Content.files = data.files;
Content.folders = data.folders;
}, "json");
},
build: function() {
for (var n = 0; n < Content.files.length; n++) {
var id = Content.files[n].id;
var name = Content.files[n].name;
var size = Content.files[n].size;
output = '<td>File</td><td>'+id+'</td><td><a href="?p=file-download&id='+id+'">'+name+'</a></td><td>'+((size/(1024*1024)).toFixed(2))+' MB</td>';
$('#filetable').append('<tr>'+output+'</tr>');
}
},
}
</script>
_exactly_是什么问题? – SLaks 2013-03-22 18:02:43
Content.files变量从不设置,所以稍后在build()函数中访问它什么都不会。 – sableguy00 2013-03-22 18:03:36
因为'$ .post'是异步的,所以你必须在'$ .post'的回调函数内调用'Content.build();'。在您的示例注释中'get'后立即执行'build',但由'get'发送的AJAX请求在调用'build'之后才会返回结果,因为它是异步的 – Ian 2013-03-22 18:05:00