javascript,缓存php帮助文件的稳定性

时间:2017-08-01 08:31:56

标签: javascript php caching offline-caching

我正在处理带有javascript代码的html文件。该站点使用一些php文件与服务器进行通信(request.send ...)。基本上它工作得很好,但我有一些可靠性问题。我发现(chrome的开发者控制台),有时会出现像服务器上找不到的xxxx.php文件这样的错误(“无法加载资源:net :: ERR_NETWORK_IO_SUSPENDED”)。看起来服务器没有足够的可用性? 现在我想在加载页面时从服务器加载所有文件,以便缓存所有文件以使其更可靠? a)这是一个好主意吗? b)如何告诉页面缓存所有文件。 感谢。

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;
    }
}

2 个答案:

答案 0 :(得分:0)

缓存通常在服务器上设置(例如apache / nginx) 如果你想缓存ajax调用的结果(你调用它们的php文件),你可以使用localstorage,尽管它的存储空间有限

在JavaScript中,无论何时使用库,都会尝试捕获ajax请求并经常重试。如果您使用ES6,您可以使用Promise拒绝该请求(如果失败),并在以后的某个地方捕获它以执行更智能的操作。

答案 1 :(得分:0)

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

request.timeout = 30000;

至于缓存,你应该在htaccess中尝试以下内容作为开始(如果expache / headers模块在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>