Я использую CryptoJs для получения хэша (sha256) файла PDF.Как получить значение хеша из асинхронной функции?
У меня уже есть хэш моего файла, но я не могу получить его вне функции.
Это мой код:
var reader = new FileReader();
var hash = "";
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
var i8a = new Uint8Array(evt.target.result);
var a = []; for (var i = 0; i < i8a.length; i += 4) { a.push(i8a[i] << 24 | i8a[i + 1] << 16 | i8a[i + 2] << 8 | i8a[i + 3]); }
var wordArray = CryptoJS.lib.WordArray.create(a,i8a.length);
var hash = CryptoJS.SHA256(wordArray);
alert(hash);
}
};
var blob = file.slice(0, file.size + 1);
reader.readAsArrayBuffer(blob);
alert(hash);
Первое предупреждение дает мне ша, но второй пуст. Как я могу сделать, чтобы хэш определялся в функцию, чтобы использовать ее после?
если я добавлю функцию callBack, она работает. Но я хотел бы сделать запрос Ajax, и когда я добавить запрос в функцию обратного вызова, как это:
function callBack(hash){
$.ajax({
type: "POST",
url:"http://...",
dataType:'json',
data:({shaPdf: hash}),
success: function(data) {
//...
},
error: function(error) {
}
});
У меня есть эта ошибка в моей консоли:
Uncaught TypeError: Cannot read property 'words' of undefined
Он работает, но после того, как я захотел сделать запрос ajax, и ваше решение не работает, если я добавлю запрос ajax в функцию callBack. У тебя есть идея? – wxcvbn
Это в основном то же самое. Прочитайте асинхронные вызовы. Ajax-звонки также нуждаются в обратном вызове после их завершения. – Mouser
Извините, я не понимаю, как я могу сделать обратный вызов по запросу ajax? – wxcvbn