Autor Thema: [javaScript]: cache für Daten, die Remote über Ajax bezogen wurden  (Gelesen 1222 mal)

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Hi,

geht um meine Ajax Suche. Inhaltlich ist es so, dass ein Domino Agent aus dem JavaScript der domino-generierten Webseite gestartet wird, wenn der User mehr als 3 Buchstaben in ein Feld eingegeben hat. Der Agent macht dann eine Volltextsuche über die NotesDatenbank und gibt die Trefferliste dann in Form von 5 Arrays zurück (an die aufrufende Ajax-JavaScript Funktion). Die zurückgegebenen Arrays sind javaScript Arrays.

Nun will ich aber den Ajax Verkehr einschränken. D.h. die Remote Aufrufe sollen beschränkt werden.
Die zurückgelieferten ResultSets sollen auf der Seite in JavaScript gecached werden.
Der Lebenszyklus des caches endet beim unload der Seite.

Hab jetzt den cache wie folgt implementiert.
Sozusagen als Objekte in assoziativen JavaScript Arrays. Das JavaScript Schlüsselwort prototype brauch ich hier - glaub ich - gar nicht?

Testseite:
Code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<title>Untitled Document</title>
		<script type="text/javascript" src="cacheTest.js"/>
	</head>
	<body onLoad="initTest();">
		<form>
			<input type="button" onclick="testFromCache('stichworte', 'ab')"/>
		</form>
		
	</body>
</html>

JavaScript code.
Code
/**
 * @author ajanssen
 */
var cacheSearchResults = new Array(); 

function addToCache(fieldName, searchStr, arrTitel, arrFiles, arrUnid, arrStichworte, arrAccess) {
	key = fieldName + "-" + searchStr
	cacheSearchResults[key] = new Object(); 
	cacheSearchResults[key]["titel"] = arrTitel;
	cacheSearchResults[key]["files"] = arrFiles; 
	cacheSearchResults[key]["unid"] = arrUnid;
	cacheSearchResults[key]["stichworte"] = arrStichworte; 	
		cacheSearchResults[key]["access"] = arrAccess; 
	
} 

function getFromCache(fieldName, searchStr) {
	fullSearchStr = fieldName + "-" + searchStr;
	
	for (var x in cacheSearchResults){
		if (fullSearchStr.indexOf(x) == 0) {
			return cacheSearchResults[x];
		}
		return null; 
		 
	}
}

function testFromCache(fieldName, searchStr) {
	ret = getFromCache(fieldName, searchStr);
	if (ret != null) {
		for (var y in ret) {
			alert(y + "=" +ret[y]);
		}
	} else {
		alert("found nothing");
	}
	
}


function initTest() {
	addToCache("stichworte", 
				"abc", 
				new Array("a", "b", "c"), 
				new Array("1", "2", "3"), 
				new Array("x", "y", "z"), 
				new Array("b", "n", "m"), 
				new Array("", "", "true")
	);
	
	
}


Weiss jemand: Ist das ok so? Gibts bessere Lösungen?

Gruß Axel
« Letzte Änderung: 10.10.07 - 13:38:09 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz