2017-01-03 2 views
0

Ich erhalte diesen Fehler, wenn ich versuche, JS für die Interaktion mit der Youtube-API zu verwenden. Dies ist der Konsolenfehler, den ich erhalte.Kann die Eigenschaft 'Suche' von undefined nicht lesen - Youtube-API

Uncaught TypeError: Cannot read property 'search' of undefined 
at HTMLFormElement.<anonymous> (app.js:7) 
at HTMLFormElement.dispatch (jquery-2.2.4.min.js:3) 
at HTMLFormElement.r.handle (jquery-2.2.4.min.js:3) 

Dies ist das Skript, das ich zu interagieren verwenden.

function tplawesome(e,t){res=e;for(var n=0;n<t.length;n++){res=res.replace(/\{\{(.*?)\}\}/g,function(e,r){return t[n][r]})}return res} 

$(function() { 
    $("form").on("submit", function(e) { 
     e.preventDefault(); 
     /* prepare api request */ 
     var request = gapi.client.youtube.search.list({ 
      part: "snippet", 
      type: "video", 
      q: encodeURIComponent($("#search").val()).replace(/%20/g, "+"), 
      maxResults: 3, 
      order: "viewCount", 
      publishedAfter: "2015-01-01T00:00:00Z" 
     }); 
     /* execute the request */ 
     request.execute(function(response) { 
      var results = response.result; 
      $("#results").html(""); 
      $.each(results.items, function(index, item) { 
      $.get("tpl/item.html", function(data) { 
       $("#results").append(tplawesome(data, [{"title":item.snippet.title, "videoid":item.id.videoId}])); 
      }); 
      }); 
      resetVideoHeight(); 
     }); 
    }); 

    $(window).on("resize", resetVideoHeight); 
}); 

function resetVideoHeight() { 
    $(".video").css("height", $("#results").width() * 9/16); 
} 

function init() { 
    gapi.client.setApiKey("myapikey"); 
    gapi.client.load("youtube", "v3", function() { 
     /* check if api is ready */ 
    }); 
} 

Ich war von der Person gesagt, die mich zunächst mit dem Skript dazu beigetragen, dass es Probleme, es sei denn es ist auf einem tatsächlichen Webserver wie Apache, aber mir ist so verstehe ich nicht, was das Problem verursacht. Irgendwelche Ideen?

+0

Hi, woher nennst du 'gapi'? Es scheint, dass das YouTube-Objekt nicht definiert ist. Hat der API-Zugriffsschlüssel die richtigen Anmeldeinformationen? Dies müsste beim Erstellen einer neuen Anwendung in der Google-Konsole festgelegt werden. – G0dsquad

+0

Es ist am Ende meines HTML, sorry darüber. Es ist definitiv in der Google-Konsole eingerichtet, das ist was mich verwirrt. – RachMcrae

+0

Das Problem wird wahrscheinlich damit zu tun haben, dass 'client.load' asynchron ist und Ihr Aufruf von' search' aufgerufen wird, wenn die API nicht bereit ist. http://stackoverflow.com/questions/24586072/gapi-client-youtube-is-undefined. Es sieht auch nicht aus wie 'init' wird jemals aufgerufen. Wenn Sie dies beim Laden der Seite aufrufen, sollten Sie in Ordnung sein, da die Suche erst nach dem Senden des Formulars ausgeführt wird. – G0dsquad

Antwort

0

Ihr Problem scheint ein Mangel an jedem Aufruf der init Methode zu sein. Fügen Sie die Zeile init(); über $("form").on("submit", function(e) { ...

Ich habe dies versucht und erhalten eine nicht autorisierte Ausnahme, wie Sie von der API-Schlüssel dud erwarten würden.

+0

Uncaught ReferenceError: Init ist nicht definiert – RachMcrae

+0

Hier ist mein Beispiel bis zu dem Punkt der nicht autorisierten Fehler: https://jsfiddle.net/bensnaize/mznj8sw5/1/ – G0dsquad

+0

Dies ist, wo es holt mich. Uncaught ReferenceError: init ist nicht definiert bei HTMLDocument. (app.js: 5) bei i (jquery-2.2.4.min.js: 2) bei Object.fireWith [als resolveWith] (jquery-2.2.4.min.js: 2) bei Funktion. bereit (jquery-2.2.4.min.js: 2) bei HTMLDocument.J (jquery-2.2.4.min.js: 2) – RachMcrae

Verwandte Themen