У меня есть этот базовый код JavaScript как часть проекта мини-файлового менеджера, который я делаю для удовольствия, но, к сожалению, он не работает. Внутри функции get()
я пытаюсь получить доступ к массиву Content.files
, но, похоже, из-за переменной области видимости или того, что внутри функции, она не устанавливает массив правильно, и на странице ничего не появляется. Firefox Error Console ничего мне не дает. Как это исправить?Доступ к 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
Переменная Content.files никогда не устанавливается, поэтому доступ к ней позже в функции build() не вызывает ничего. – sableguy00
Вам нужно будет вызвать 'Content.build();' внутри обратного вызова для '$ .post', поскольку' $ .post' является асинхронным. 'build' выполняется сразу после' get' в вашем комментарии к примеру, но запрос AJAX, отправленный 'get', не возвращает результаты, пока не будет вызвана' build', потому что она асинхронна – Ian