2017-08-01 2 views
0

Je travaille sur un fichier html avec du code javascript. Ce site utilise des fichiers php pour la communication avec un serveur (request.send ...) En gros, ça marche très bien, mais j'ai quelques problèmes de fiabilité. J'ai découvert (console de développeur de chrome), que parfois il y a une erreur comme fichier xxxx.php introuvable sur le serveur ("Impossible de charger la ressource: net :: ERR_NETWORK_IO_SUSPENDED"). On dirait que le serveur n'a pas une disponibilité suffisante? Maintenant, je voudrais charger tous les fichiers du serveur lorsque la page est chargée pour avoir tous les fichiers mis en cache pour le rendre plus fiable? a) est-ce une bonne idée? b) comment puis-je dire à la page de mettre en cache tous les fichiers. merci.javascript, mise en cache des fichiers d'aide PHP pour la stabilité

function sendRequestSendCommand(nummer, text) { // Anfrage ID = 1 
    // Request erzeugen 
    if (window.XMLHttpRequest) { 
     request = new XMLHttpRequest(); // Mozilla, Safari, Opera 
    } else if (window.ActiveXObject) { 
     try { 
      request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5 
     } catch (e) { 
      try { 
       request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6 
      } catch (e) {} 
     } 
    } 

    // überprüfen, ob Request erzeugt wurde 
    if (!request) { 
     alert("Kann keine XMLHTTP-Instanz erzeugen"); 
     return false; 
    } else { 
     var url = "SendeKommandoAnWatch.php"; 
     // Request öffnen 
     request.open('post', url, true); 
     // Requestheader senden 
     request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
     // Request senden 
     request.send('num='+nummer+'&mycountry='+mycountry+'&text='+text);  // RD: mehrere mit & verbinden 
     // Request auswerten 
     request.onreadystatechange = interpretRequestSendCommand; 
    } 
} 

function interpretRequestSendCommand() {   
    switch (request.readyState) { 
     // wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen 
     case 4: 
      if (request.status != 200) {      
       if(request.status == 0) 
       { 
        //alert("Es ist ein Fehler aufgetreten:\nPHP-File nicht gefunden!\nBitte versuchen sie es erneut."); 
       } 
       else { 
        //alert("Es ist ein Fehler aufgetreten: "+request.status); 
       } 
      } else { 
       var content = request.responseText; 
       console.log('Antwort vom Server = ' + content); 
       try { 
        var response = JSON.parse(content); 
       } 
       catch(err) 
       { 
        console.log('Fehler aufgetreten: konnte serverantwort1 nicht interpretieren'); 
        state = 9; 
       } 

       if(response.success == 1) 
       { 
        console.log('rücksetzen der nummer an server übermittelt' + response.tokenID);  // sonst hier keine weitere aktion mehr (nicht mehr warten) 
        //console.log('tokenID vom Server = ' + response.tokenID); 
        //tokenID = response.tokenID; 
        //state = 85;        
       } 
       else 
       { 
        console.log('Verbindung zum Server nicht erfolgreich! ERROR 101');       
        state = 9;  // error 
       } 

      } 
      break; 
     default: 
      break; 
    } 
} 
+0

BTW, je suis un débutant :-) – hewald

+0

En outre, si j'étais vous, je vais améliorer ma capacité de serveur, –

+0

je n'héberge pas les fichiers par moi-même. les fichiers sont copiés dans un hébergeur. – hewald

Répondre

0

caching est généralement définie sur le serveur (par exemple apache/nginx) Si vous vouliez mettre en cache les résultats des appels ajax (fichiers php vous les appelez) vous pouvez utiliser localStorage, bien qu'il ait le stockage limité

En JavaScript, chaque fois que vous utilisez une bibliothèque ou non, vous essayez d'attraper la requête ajax et réessayez de temps en temps. Si vous utilisez ES6, vous pouvez utiliser une promesse pour rejeter la demande si elle échoue et l'attraper ailleurs pour faire quelque chose de plus intelligent.

+0

merci. Réessayez la demande pourrait être une bonne idée ... – hewald

+0

élaborer votre question avec un exemple de code, de cette façon je peux étendre ma réponse avec un exemple de code ainsi – DarkMukke

+0

J'ai joint la partie où j'appelle le fichier php et attend la réponse. – hewald

0

Je pense que vous devez spécifier un délai (plus grand) pour vos appels ajax avant de les exécuter.

request.timeout = 30000; 

En ce qui concerne la mise en cache, vous devriez essayer ce qui suit dans votre htaccess en début (si expire/module en-têtes sont disponibles en apache):

<IfModule mod_expires.c> 
    <IfModule mod_headers.c> 
     #Proxy servers may cache 
     Header append Cache-Control "public" 
     Header append Vary: Accept-Encoding 
    </IfModule> 
# Enable expiration a month in future by default for everything. (this could be tuned with "ExpiresByType".) 
ExpiresActive on 

ExpiresDefault "access plus 1 month" 
</IfModule> 
+0

a) je n'ai pas un htaccess!? b) le fichier est appelé toutes les 10 secondes. Je vais essayer de définir un délai d'attente comme 5sec !? – hewald

+0

j'aime l'idée avec le délai d'attente, cela me rapportera en avant. Merci. – hewald