2017-08-01 147 views
0

我正在与JavaScript代码的HTML文件。该网站使用一些PHP文件与服务器通信(request.send ...)。基本上它工作得很好,但我有一些可靠性问题。我发现(开发者控制台的铬),有时有一个错误,如服务器上找不到xxxx.php文件(“无法加载资源:net :: ERR_NETWORK_IO_SUSPENDED”)。看起来服务器没有足够的可用性? 现在,我想加载页面时,从服务器加载所有的文件,使所有的文件缓存,使其更可靠? a)这是一个好主意吗? b)我如何告诉页面缓存所有文件。 谢谢。JavaScript,缓存php的帮助文件的稳定

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

顺便说一句,我是初学者:-) – hewald

+0

另外,如果我是你,我会提高我的服务器容量, –

+0

我不会自己托管这些文件。这些文件被复制到托管商。 – hewald

回答

0

缓存通常被设置在服务器上(如阿帕奇/ nginx的) 如果你想缓存AJAX调用的结果(PHP文件,你叫他们),你可以使用本地存储,但它限制了存储

在JavaScript中,无论您是否使用库,您都会尝试捕获ajax请求并每隔一段时间重试一次。如果你使用ES6,你可以使用Promise在失败的时候拒绝请求,并在稍后的某个地方抓住它来做更聪明的事情。

+0

谢谢。重试请求可能是一个好主意... – hewald

+0

用一些示例代码详细说明您的问题,这样我可以用一些示例代码扩展我的答案 – DarkMukke

+0

我附加了我调用php文件并等待回复的部分。 – hewald

0

我认为你需要在执行它们之前为你的ajax调用指定一个(更大的)超时。

request.timeout = 30000; 

至于缓存,你应该尝试在你的htaccess以下作为一个开始(如果到期/头模块是在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)我没有一个htaccess!? b)每10秒钟调用一次该文件。 我会尝试设置一个像5秒的超时!? – hewald

+0

我喜欢超时的想法,这将带给我前进。谢谢。 – hewald