Oppure

Loading
08/11/18 16:44
Djot
Salve a tutti,
Sto sviluppando una piccola pagina con una barra di ricerca, l'utente inserisce una qualsiasi parola, e il sito riporta i primi 5 video di youtube con tale parola chiave (in base al numero di visualizzazioni).
Il problema è che ciò non avviene, ogni volta che viene digitata una qualsiasi parola sulla barra di ricerca la console riporta l'errore:

TypeError: Cannot read property 'search' of undefined
app.js:6
at HTMLFormElement.<anonymous> (/..../…)

Vi allego qui sotto il sorgente della parte Javascript, se potete darmi delle spiegazioni ve ne sarei molto grato.

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();
       var request = gapi.client.youtube.search.list({
            part: "snippet",
            type: "video",
            q: encodeURIComponent($("#search").val()).replace(/%20/g, "+"),
            maxResults: 5,
            order: "viewCount",
       }); 
       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("AIzaSyAN11KrZnAJtWZe8JFV5lpPRsDOQWzOkV8");
    gapi.client.load("youtube", "v3", function() {
    });
}

aaa
08/11/18 20:47
Thejuster
è normale che la funzione res.replace non abbia il doppio apice? 8-|

in più, più che un replace quello mi sembra un Regex.


{res=res.replace(/{{(.*?)}}/g,function(e,r){return t[n][r]})}return res}

Ti consiglio di rivedere bene questa funzione res.replace.
Ultima modifica effettuata da Thejuster 08/11/18 20:49
mire.forumfree.it/ - Mire Engine
08/11/18 22:03
Djot
{res=res.replace("/{{(.*?)}}/g","function(e,r){return t[n][r]}")}return res} 

In questo modo intendi?
aaa
09/11/18 9:47
Thejuster
Si ma comunque a mio parere è sbagliato.

Esegui un replace come fosse un regex.
Quella stringa in replace dovrebbe stare in un regex.

Cerca online javascript regex.

Ed il risultato lo recupera in automatico
mire.forumfree.it/ - Mire Engine
09/11/18 11:05
Djot
Quindi dovrei usare un regex al posto del replace?
aaa
09/11/18 19:30
Thejuster
Si ma...

Devi sapere che ci vuoi fare.

esiste compile, exec, test e ToString.

Dipende cosa vuoi che quella funzione faccia.
Ti consiglio di dare una lettura prima alla documentazione di quell'esempio se ne ha una.
O di leggerti una guida in javascript per il regex e capire cosa ti server per ottenere quello che cerchi di fare.
mire.forumfree.it/ - Mire Engine