我有這個基本的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