#javascript #google-drive-api
#javascript #google-drive-api
Вопрос:
Я использую код из этого примера
https://gist.github.com/Daniel15/5994054
Средство выбора возвращает файл, и когда я пытаюсь загрузить его с помощью этой функции
function downloadFile(file, callback) {
if (file.downloadUrl) {
var accessToken = gapi.auth.getToken().access_token;
var xhr = new XMLHttpRequest();
xhr.open('GET', file.downloadUrl);
xhr.setRequestHeader('Authorization', 'Bearer ' accessToken);
xhr.onload = function() {
callback(xhr.responseText);
};
xhr.onerror = function() {
callback(null);
};
xhr.send();
} else {
callback(null);
}
}
Он выдает эту ошибку
Ошибка типа: обратный вызов не является обратным вызовом функции (null) filepicker.js (строка 130)
Комментарии:
1. как вы вызываете DownloadFile, передаете ли вы ему функцию? т.е. DownloadFile(«file»,function(){ // функция обратного вызова });
2. onSelect: функция (файл) { console.log(файл); DownloadFile(файл); оповещение (‘Selected’ file.title); }
Ответ №1:
Итак, из вашего примера вызова
function initPicker() {
var picker = new FilePicker({
apiKey: 'AIzaSyB8a8yohsAyEz1eZEFgt2YE-tMgACYWnVs',
clientId: 458068379722,
buttonEl: document.getElementById('pick'),
onSelect: function(file) {
console.log(file);
downloadFile(file);
alert('Selected ' file.title);
}
});
}
вы не передаете функцию обратного вызова, либо обработайте это, проверив, что обратный вызов является функцией в методе DownloadFile, прежде чем он попытается ее запустить…..
function downloadFile(file, callback) {
if (file.downloadUrl) {
var accessToken = gapi.auth.getToken().access_token;
var xhr = new XMLHttpRequest();
xhr.open('GET', file.downloadUrl);
xhr.setRequestHeader('Authorization', 'Bearer ' accessToken);
xhr.onload = function() {
if (typeof callback == "function") {
callback(xhr.responseText);
}
};
xhr.onerror = function() {
if (typeof callback == "function") {
callback(null);
}
};
xhr.send();
} else {
if (typeof callback == "function") {
callback(null);
}
}
}
или предоставьте функцию обратного вызова.
function initPicker() {
var picker = new FilePicker({
apiKey: 'AIzaSyB8a8yohsAyEz1eZEFgt2YE-tMgACYWnVs',
clientId: 458068379722,
buttonEl: document.getElementById('pick'),
onSelect: function(file) {
console.log(file);
downloadFile(file, function(){
//do something when the file is donwloaded
});
alert('Selected ' file.title);
}
});
}
Комментарии:
1. я добавил функцию обратного вызова в свой downloadfile с предупреждением, и с этим я избавился от ошибки, но, похоже, она больше ничего не делает, я имею в виду, что выбранный мной файл не загружается