2017-10-02 1 views
1

Je suis à la recherche d'un moyen d'inclure un fichier .js externe et de recevoir les en-têtes de réponse de cette requête.Récupérer les en-têtes de réponse à partir de l'inclusion d'un fichier javascript externe

<script src="external/file.js?onload=callback"> 
function callback(data) { 
    data.getAllResponseHeaders(); 
} 
</script> 

De toute évidence, cela ne semble pas fonctionner.

Comment puis-je obtenir l'en-tête de réponse en incluant le javascript? Il ne peut pas s'agir d'une deuxième requête.

Dans votre réponse, évitez d'utiliser jQuery.

Merci pour toute aide.

EXEMPLE DE TRAVAIL Merci à gaetanoM

oXmlHttp.withCredentials = true; is for CORS 

oXmlHttp.responseType = 'text'; is for DOM input? 

Voici le code que j'utilise maintenant;

<script> 
    function loadScript(url) { 

    var oXmlHttp = new XMLHttpRequest();    
     oXmlHttp.withCredentials = true; 
     oXmlHttp.responseType = 'text'; 
     oXmlHttp.open('GET', url, true); 
     oXmlHttp.onload = function() { 

      if(oXmlHttp.status >= 200 || oXmlHttp.status == XMLHttpRequest.DONE) { 

      var x = oXmlHttp.getAllResponseHeaders(); 
      console.log(x); 

      if(oXmlHttp.responseText !== null) { 

       var oHead = document.getElementsByTagName('HEAD').item(0); 
       var oScript = document.createElement("script"); 
        oScript.language = "javascript"; 
        oScript.type = "text/javascript"; 
        oScript.defer = true; 
        oScript.text = oXmlHttp.responseText; 
        oHead.appendChild(oScript); 

      } 

      } 

     } 
     oXmlHttp.send(); 
    } 

    loadScript("http://url/to/file.js");   
</script> 

Répondre

1

getAllResponseHeaders(): La méthode XMLHttpRequest.getAllResponseHeaders() retourne tous les en-têtes de réponse, séparés par CRLF, comme une chaîne, ou une valeur nulle si aucune réponse n'a été reçue. Si une erreur réseau s'est produite, une chaîne vide est renvoyée.

Cela signifie que vous devez charger les js externes avec un XMLHttpRequest:

De plus, de cette façon vous charger qu'une seule fois le fichier.

function loadScript(url) { 
    var oXmlHttp = new XMLHttpRequest(); 
    oXmlHttp.onreadystatechange = function() { 
     if (oXmlHttp.readyState == XMLHttpRequest.DONE) { 
      if (oXmlHttp.status == 200) { 


       var x = oXmlHttp.getAllResponseHeaders(); 
       console.log(x); 


       if (oXmlHttp.responseText != null) { 
        var oHead = document.getElementsByTagName('HEAD').item(0); 
        var oScript = document.createElement("script"); 
        oScript.language = "javascript"; 
        oScript.type = "text/javascript"; 
        oScript.text = oXmlHttp.responseText; 
        oHead.appendChild(oScript); 
       } 
      } else { 
       console.log("Error", oXmlHttp.statusText) 
      } 
     } 
    } 
    oXmlHttp.open('get', url); 
    oXmlHttp.send(); 
} 


loadScript("11.js?onload=callback"); 
+1

fait exactement ce que je voulais faire, je vous remercie! Pour CORS, j'ai ajouté oXmlHttp.withCredentials = true; –

+0

La fonction crée 3 blocs de script dans . 1 est vide, les 2 autres sont le javascript qu'il récupère. Je ne comprends pas pourquoi ça fait ça. –

+0

J'ai légèrement modifié votre script, notamment le paramètre onreadystatechange sur onload, car il lance la fonction plusieurs fois. –