我想實現從服務器上壓縮.exe文件,而有人用複選框下載文件,但不是重點。試圖瞭解jszip如何工作。 但我有一些問題:下載器示例無法正常工作。 我從https://stuk.github.io/jszip/documentation/examples/downloader.html例如,刪除一些多餘的功能,如樣式,鏈接等 幾乎所有的運行,除了塊正確:
JSZipUtils.getBinaryContent(URL,函數(ERR,數據){..} - 這部分沒有按「噸執行,它給了我一個錯誤:
‘錯誤:InvalidStateError:無法讀取‘XMLHttpRequest的responseText的’物業‘’:這個值是唯一可如果對象的‘responseTyp的’是’或‘文本’(是「arraybuffer」)「
我也有一個問題:如果我把劇本‘demo.js’在標題部分腳本不按按鈕運行的腳本應該下載,因爲它們體積小,頭載F。 aster然後身體。我讀過包含腳本的最好方法,就是在結束標記之前將它們放在正文的最後。但是,如果我將所有腳本放在主體的末尾,按下按鈕時不會發生任何事情。爲什麼它以這種方式工作?我紅了很多文章,但沒有找到答案。我是JS的新手,所以不要狠狠地打我)。 我將非常感謝任何幫助和建議。Jszip和jquery問題
這是我的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
- 子目錄 「DIST」:
- demo.js
- FileSaver.js
- 的jquery-1.8.3.min.js
- jszip.js
- jszip -utils.js
- 子目錄 「DIST」:
- 1.HTML
「不工作」是沒有問題的描述 – PeeHaa
我糾正和更新問題說明) – filSand