ugrás a tartalomhoz

Ajax browser cache hiba eseten IE7

sunder · 2008. Aug. 3. (V), 10.05
Sziasztok!

Gyors kérdés IE7-tel kapcsolatban. Egy DIV-be töltök be AJAX segítségével egy másik oldalt.
Amennyiben bármilyen hiba történik, (mondjuk PHP dob valami hibát), akkor az IE7 menthetetlenül megjegyzi, sem refresh, sem reload nem segít rajta, a browser bezárásáig/újraindításáig úgy marad. Firefox természetesen lefuttatja újra a már javított queryt.

Példa:
Főoldal:
<script type="text/javascript">
function makeRequest(url, id, MyMessage) {
  var http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
      http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
          //http_request.overrideMimeType('text/xml');
          // See note below about this line
        }
    } else if (window.ActiveXObject) { // IE
      try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
      }
    }

  if (!http_request) {
    alert('Error creating XMLHttpRequest()');
    return false;
  }
 
  http_request.onreadystatechange = function() {
    var e = document.getElementById(id)
    if (http_request.readyState == 4 && http_request.status == 200)  {
      e.innerHTML = http_request.responseText
    }
    else  e.innerHTML = MyMessage
  };
  http_request.open('GET', url, true);
  http_request.send(null);
}

</script>

<div id="celpont">
123
</div>
<hr />
<input type="button" value="Betolt" onclick='makeRequest("b.php", "celpont", "Toltom...")' />

Betöltődő oldal (b.php):
<?php
echo "Elrontva"
echo "SUCCESS";
?>



Ugye a b.php-ban hiányzik az echo-t záró pontosvessző, esetünkben direkt. Ha ezt így betöltöm, akkor ugye hibát dob:
Parse error: syntax error, unexpected T_ECHO, expecting ',' or ';' in C:\user\wamp\www\b.php on line 4

Ha javítom a hibát, a Firefox rendesen frissíti az immár okés queryt, de az IE7 (IE6 alatt nem néztem) "tárolja" a hibát. Érdekes módon, ha NINCS elrontva a b.php csak változtatom az adatot, azt az IE7 is szépen változtatja.

Kérdések a következők:
- ismer-e az Ajax bármilyen no-cache opciót? Vagy ez a hiba csak és kizárólag felhasználó oldalon orvosolható cache opciók megváltoztatásával?
- Más böngészőkben is előfordulhat ez?

ELőre is köszönök minden észrevételt!

Csaba
 
1

AJAX != voodoo

zila · 2008. Aug. 3. (V), 12.50
Egy ajax kérés nem különbözik bármely más http kéréstől, így nyugodtan használhatod a megszokott cache gátló headereket (sőt ajánlott használni őket) az ajax szerveroldali kiszolgálásakor.
2

Header info

sunder · 2008. Aug. 3. (V), 13.12
Zila,
az alabbi metak vannak per pillanat beteve:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="PRAGMA" content="NO-CACHE" />

Ha nem ezekre gondoltal, akkor pontosabban mire?

Egyebirant koszonom a gyors valaszt!

Csaba
3

HTTP header kell, nem meta

zila · 2008. Aug. 3. (V), 13.35
A meta headerek ajax esetén annyit érnek mint halottnak a csók... (mondjuk sima oldalaknál se a leghatékonyabbak) Itt azért már van különbség: az ajax kérés eredményét nem rendereli le a böngésző magától. Ráadásul többnyire nem teljes oldalt kérsz le ajax-szal. Ezért a megfelelő HTTP headerek kiadása fontos. Én ezeket használom:
header('Expires: Sun, 01 Jan 1995 04:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s' ).' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');