Я использую вызов Jquery Ajax для доставки загрузки файла пользователям сайта.Процесс:
1) Пользователи выбирают различные файлы, которые они хотят, нажав на них 2) Я сохраняю их выбор в базе данных mysql 3) У меня есть панель div в правой части страницы, где перечислены их файлы(как корзина) и предоставляет кнопку загрузки 4) Если они нажимают на кнопку, он запускает jjery ajax-вызов php-файла для создания zip-файла, загружает все выбранные файлы в zip-архив и затем закрывает zip-архив.Наконец, верните имя файла zip в формате json.5) success: затем запускает window.open, чтобы вызвать загрузку
Все это в основном работает, но есть странная проблема, которую я не могу решить, и это убивает меня!
Вот битыкода:
Первый javascript:
//download files in a zip
$("#zipdownload").click(function(){
$.ajax({
type: "GET",
url: "zipdload.php",
dataType: "json",
cache: false,
success: function(data) {
//opens a small window for IE security thing
window.open(data.archive,'download','left=20,top=20,width=300,height=20,toolbar=0,resizable=0');
// then clears all the divs to simulate the bag emptying
$('#bagCounter').text("Empty!");
$('#zipdownload').text("");
$('#item-list').text("");
}
});
});
Затем макет:
//styled containers to create a sliding panel with a clickable tab
<div id="rightpanelouter">
<div id="rightpanelinner">
<?php if ($_SESSION['username']){
echo $_SESSION['username'].'<br>Toolbox';
};
?>
<div id="bagContents">
<div id="item-list">
<br> Show Bag
//PHP to generate list of files
</div>
<br><br>
<div id="zipdownload" style="cursor:pointer;">
//this element has the action attached to fire function.
<?php
if ($numOfBagDocs != 0){
echo 'Download';
}
?>
</div>
</div>
Если кому-то интересно, я тоже могу прикрепить скрипт PHP, но яЯ предполагаю, что это не проблема.
Проблема:
Сценарий запускается дважды (как минимум).
Первоначально я добавил в zip-файл штамп now (), чтобы они всегда были разными.но я иногда замечал, что window.open пытался загрузить файл с меткой now (), равной 1 секунде, отличной от сохраненного файла.
Затем я попытался изменить число на rand (), которое показало два разных случайных числа!
Поэтому я удалил добавление, чтобы имя файла всегда было одинаковым (только добавляется с именем пользователя)и что скачал, но просто продолжал добавлять тот же zip-файл с новыми записями.Все, что нужно сделать, это заставить zip расти и расти.
Так что я попытался вставить ссылку file_exists и unlink, чтобы удалить файл перед созданием zip.Все, что казалось, делало, это удаляло файл ПОСЛЕ создания zip и до начала загрузки jscript !!!: - (
Все это говорит мне, что скрипт вызывается как минимум дважды.
Я видел много записей, похожих на это, но я не могу понять, относятся ли они к моемуОднажды было предложено связать 'unbind' перед функцией click, и это просто перестало работать, так что ничего хорошего.
HTML-код, который я прикрепил, почти сразу после тега body, и нетдругие javascript-вызовы в этом разделе.
Так что извиняюсь, если здесь есть действительно глупая ошибка, но я сейчас провел много часов, прочесывая и просто не могу ее решить.
Я быДЕЙСТВИТЕЛЬНО ценю любую помощь. Заранее спасибо.