2017-08-25 2 views
-1

J'utilise ASYNCH XMLHttpRequests pour obtenir des données à partir d'une API Javascript vanille pour l'extension de chrome que je fais comme çaPuis-je encapsuler la fonction de rappel d'un xmlhttprequest asynchrone dans une autre fonction?

function getInfo(url, callback) { 
    var xmlhttp; 
    xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState === 4 && xmlhttp.status === 200) 
      callback(xmlhttp.responseText); 
    } 
    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 
} 

J'ai quelques onglets que quand on clique dessus, je veux qu'ils en faire la demande XMLHttpRequest comme ce

<div class="tab"> 
     <button class="tablinks" id = "HN" onclick="getLinks(event)"><img src=https://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Y_Combinator_Logo_400.gif/100px-Y_Combinator_Logo_400.gif></button> 
     <button class="tablinks" id= "Reddit" onclick="getLinks(event)"><img class = "logo" src=https://www.observepoint.com/wp-content/uploads/2015/03/reddit-129.png></button> 
     <button class="tablinks" id= "Github" onclick="getLinks(event)"><img class ="logo" src=https://static1.squarespace.com/static/56278c08e4b07be93cfbb3aa/t/57f1de373e00bef6ad3fc3bc/1475468903021/github-logo?format=100w></button> 
    </div> 
function getLinks(evt) { 
    getInfo("https://hacker-news.firebaseio.com/v0/topstories.json", function(result) { 
     //do stuff 
    }); 
} 

Quand je fais appel à la fonction getLinks, les choses que je fais pour changer t Le HTML ne change jamais. Ma question est, est-il possible de mettre la fonction de rappel à l'intérieur d'une autre fonction comme je le fais? Ou est-ce que je m'approche de la mauvaise façon? Je le veux pour que seulement quand j'appuie sur un des trois boutons il récupère des liens de l'API et les mette dans le HTML. Y at-il une meilleure façon de faire des appels asynchrones dans JS vanilla ne se produisent que lors d'une action spécifique. Je suis assez nouveau à JS.

Répondre

0

Ma question est, est-il possible de mettre la fonction de rappel à l'intérieur d'une autre fonction comme je le fais?

Oui.