2015-11-28 7 views
-2

Я хочу реализовать zipping .exe файлы с сервера, в то время как кто-то загружает файлы с помощью флажков, но не в этом. Попытка понять, как работает jszip. Но у меня есть некоторые проблемы: пример загрузчика работает неправильно. я беру пример из https://stuk.github.io/jszip/documentation/examples/downloader.html, удалить некоторые избыточные функции, такие как стили, ссылка и т.д. Почти все работает корректной за исключением блока:
JSZipUtils.getBinaryContent (URL, функция (эээ, данные) {..} - этот раздел Безразлично 't execute, это дает мне ошибку :
«Ошибка: InvalidStateError: Не удалось прочитать свойство responseText из« XMLHttpRequest »: значение доступно, только если« responseType »объекта« или »текст (был 'arraybuffer'). "

Также у меня есть другой вопрос: если я помещаю сценарий« demo.js »в сценарий раздела заголовка, не запускается нажатием кнопки. Сценарии должны быть загружены, потому что они являются небольшими размерами и загружают заголовок f астра, затем тело. Я прочитал, что лучший способ включить скрипты - разместить их прямо в конце тела, прежде чем закрывать тег. Но если я поместил все свои скрипты в конце тела, ничего не произойдет, когда будет нажата кнопка. Почему это работает? Я крашу много статей, но не нахожу ответа. Я новичок в JS, поэтому не бить меня сильно). Буду очень благодарен за любую помощь и предложения.Jszip и jquery issue

это мой 1.html файл:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
<meta charset="utf-8"> 
<title>something</title> 
<script type="text/javascript" src="dist/jszip.js"></script> 
<script type="text/javascript" src="dist/jszip-utils.js"></script> 
<script type="text/javascript" src="dist/jquery-1.8.3.min.js"></script> 
<script type="text/javascript" src="dist/FileSaver.js"></script> 
    </head> 
    <body> 
<form action="#" id="download_form"> 
<ul> 
    <li> 
     <label> 
     <input type="checkbox" data-url="dist/jszip.js" checked /> 
    dist/jszip.js 
    </label> 
</li> 
<li> 
    <label> 
    <input type="checkbox" data-url="dist/demo.js" checked /> 
    dist/demo.js 
    </label> 
</li> 
<li> 
    <label> 
    <input type="checkbox" data-url="dist/FileSaver.js" /> 
    dist/FileSaver.js 
    </label> 
    </li> 
    </ul> 
<button type="submit" class="btn btn-primary">pack them !</button> 
</form> 
<script type="text/javascript" src="dist/demo.js"></script> 
    </body> 
</html> 

и вот demo.js:

jQuery(function ($) { 
    "use strict"; 

/** 
* Reset the message. 
*/ 
function resetMessage() { 
    $("#result") 
    .removeClass() 
    .text(""); 
} 
/** 
* show a successful message. 
* @param {String} text the text to show. 
*/ 
function showMessage(text) { 
    resetMessage(); 
    $("#result") 
    .addClass("alert alert-success") 
    .text(text); 
} 
/** 
* show an error message. 
* @param {String} text the text to show. 
*/ 
function showError(text) { 
    resetMessage(); 
    $("#result") 
    .addClass("alert alert-danger") 
    .text(text); 
} 

/** 
* Fetch the content, add it to the JSZip object 
* and use a jQuery deferred to hold the result. 
* @param {String} url the url of the content to fetch. 
* @param {String} filename the filename to use in the JSZip object. 
* @param {JSZip} zip the JSZip instance. 
* @return {jQuery.Deferred} the deferred containing the data. 
*/ 
function deferredAddZip(url, filename, zip) { 
    var deferred = $.Deferred(); 
    JSZipUtils.getBinaryContent(url, function (err, data) { 
     if(err) { 
      deferred.reject(err); 
     } else { 
      zip.file(filename, data, {binary:true}); 
      deferred.resolve(data); 
     } 
    }); 
    return deferred; 
} 

if(!JSZip.support.blob) { 
    showError("This demo works only with a recent browser !"); 
    return; 
} 

var $form = $("#download_form").on("submit", function() { 
alert("button press"); /* it works fine */ 
    resetMessage(); 

    var zip = new JSZip(); 
    var deferreds = []; 

    // find every checked item 
    $(this).find(":checked").each(function() { 
     var $this = $(this); 
     var url = $this.data("url"); 
     var filename = url.replace(/.*\//g, ""); 
     deferreds.push(deferredAddZip(url, filename, zip)); 
    }); 

    // when everything has been downloaded, we can trigger the dl 


    // section below doesn't work at all - alerts used for simplest debugging 
    $.when.apply($, deferreds).done(function() { 
     //alert("downloading must start"); 
     var blob = zip.generate({type:"blob"}); 

     // see FileSaver.js 
     saveAs(blob, "example.zip"); 

     showMessage("done !"); 
    }).fail(function (err) { 
     showError(err); 
    }); 
    return false; 
    }); 
}); 

моя папка-файл, который включает в себя файлы выглядит следующим образом:

  • -root папка:
    • 1.html
      • подкаталог "расстояние":
        • demo.js
        • FileSaver.js
        • Jquery-1.8.3.min.js
        • jszip.js
        • jszip -utils.js
+1

«Не работает» не представляет проблемы Описание – PeeHaa

+0

Я исправил и обновил описание проблемы) – filSand

ответ

1

Устранена моя проблема.
Проблема заключается в том, что html-файл был открыт в браузере на моей локальной машине, используя файл: /// протокол. Для правильной работы он должен использовать протокол http.
Итак, я загружаю сервер Apache, запускаю на своем компьютере и запускаю свой html-файл на сервере Apache, который работал правильно.