2016-06-08 2 views
0

Я работаю с API-интерфейсом google и просто пытаюсь загрузить в библиотеку, когда получаю ошибку.Не могу прочитать свойство «load» undefined error

function loadDriveApi(){ 
    gapi.client.load('drive','v3',setMeta()) 
} 

Это функция загрузки, которую я получил из документации. Это называется аддистрибьютором

<script>document.getElementById('save').addEventListener('click',loadDriveApi())</script> 

и loadDriveApi вызывает эту функцию в конце концов.

function setMeta(){ 
    var body={'contentHints.indexableText': document.getElementById('drop')} 
    var request = gapi.client.drive.files.update({ 
     'fileId': document.getElementById('doc_id').value, 
     'resource': body 
    }); 
    request.execute(function(resp){ 
     console.log('Copy ID: ' + resp.id); 
    }) 
} 

Это сводит меня с ума, и это, вероятно, что-то настолько мал и глуп, что будет в конечном итоге вопрос, но если у вас есть какие-либо предложения, я хотел бы услышать их. Я также довольно новобранец с JavaScript, так что может быть, почему

Благодаря

+4

Вы, вероятно, хотите 'document.getElementById ('save'). AddEventListener ('click', loadDriveApi)' - то есть * без * the '()', который в настоящее время вызывает вашу функцию вместо того, чтобы передавать ее в 'addEventListener() '. – Pointy

+2

... что pointy сказал, а также 'gapi.client.load ('drive', 'v3', setMeta)' – dfsq

+0

Я прекратил получать ошибку, я избавился от скобок, спасибо, ребята! Теперь на следующую ошибку – user3204820

ответ

1

gapi.client, вероятно, нулевым или неопределенным. Если это так, никаких свойств не будет, поэтому вы получите неопределенную ошибку свойства.

Прежде чем вызывать loadDriveApi(), убедитесь, что зависимость JavaScript JavaScript от Google Диска полностью загружена.

Кроме того, вы должны передавать функцию loadDriveApi методу addEventListener, а не результат вызова loadDriveApi.

Например:

<script>document.getElementById('save').addEventListener('click',loadDriveApi())</script> 

должно быть

<script>document.getElementById('save').addEventListener('click', loadDriveApi)</script> 

То же самое относится к функции gapi.client.load:

gapi.client.load('drive','v3',setMeta()) 

должно быть

gapi.client.load('drive','v3',setMeta) 
+0

Итак, как я могу узнать, полностью ли загружен API-интерфейс Drivers перед вызовом функции? – user3204820

+0

Это зависит от того, как вы загружаете его на страницу. Вы можете добавить прослушиватель onload к тегу скрипта, который загружает его, либо вручную, добавив атрибут onload в тег скрипта, либо, лучше, программно. Есть ли причина, по которой вы не используете jQuery или подобную библиотеку для поиска элементов в DOM и управления обработчиками событий? Метод getScript jQuery загрузит скрипт и вызовет функцию обратного вызова, когда будет выполнена загрузка. Вы можете выполнить проверку в обратном вызове или установить переменную флага, которую позже вы можете использовать, чтобы проверить, что загрузка выполнена. См. Https://api.jquery.com/jquery.getscript –

+0

Я получил его работу, API был полностью загружен только код, который использует диск, является немым, и документация не такая ясная, как мне бы хотелось. Но я очень ценю благодарность! – user3204820

Смежные вопросы