我正在处理带有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;
}
}
答案 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>