2017-08-01 80 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