request unterbrechen

JesusFreak777

Erfahrenes Mitglied
Hi ihr,

ich hab hier ein kleines einfaches script:

HTML:
<input type='text' onkeyup=' kundensuche(this.value) ' />


hier meine Javascript Funktion (nix neues... einfach aus dem Internetz kopiert)
Code:
	function kundensuche(suche) {
	

		var xmlHttp = null;
		// Mozilla, Opera, Safari sowie Internet Explorer 7
		if (typeof XMLHttpRequest != 'undefined') {
			xmlHttp = new XMLHttpRequest();
		}
		if (!xmlHttp) {
			// Internet Explorer 6 und älter
			try {
				xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try {
					xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e) {
					xmlHttp  = null;
				}
			}
		}
		// Wenn das Objekt erfolgreich erzeugt wurde			
		if (xmlHttp) {
			var url = "search_kunde.php";
			var params = "suche="+suche;
			
			xmlHttp.open("POST", url, true);
			
			//Headerinformationen für den POST Request
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			xmlHttp.setRequestHeader("Content-length", params.length);
			xmlHttp.setRequestHeader("Connection", "close");					
		
			xmlHttp.onreadystatechange = function () {
				if (xmlHttp.readyState == 4) {
					// Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
					document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
				}
			};				
			xmlHttp.send(params);
		}			
	}

jetzt zu meinem Problem...

wenn ich eine suche eingebe: z.B. Hallo, dann sucht er "H", sobald ich da "a" eingetippt habe "Ha"...
oft ist es so, das der Request länger dauert als das tippen und bis ich "Hallo" eingetippt habe gibt er mir das Ergebnis von "H" zurück.
Mein Request ist eine SQLi Tabelle mit ca. 6000 Datensätzen (aktuell).

wie kann ich da einen Unterbrecher einbauen das er einfach den letzten Request sucht und alles vorher vergisst -> sollte er aber es schaffen zwischendurch was zu finden (weil System schnell genug) darf ers auch ausgeben.

Vielen Dank für jeden Tipp

Gruß baer
 
Javascript:
var lastRequest ='';


function kundensuche(suche) {
    
 
        var xmlHttp = null;
        // Mozilla, Opera, Safari sowie Internet Explorer 7
        if (typeof XMLHttpRequest != 'undefined') {
            xmlHttp = new XMLHttpRequest();
        }
        if (!xmlHttp) {
            // Internet Explorer 6 und älter
            try {
                xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
            } catch(e) {
                try {
                    xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
                } catch(e) {
                    xmlHttp  = null;
                }
            }
        }
        // Wenn das Objekt erfolgreich erzeugt wurde            
        if (xmlHttp) {


if(lastRequest.abort) {
    lastRequest.abort();
}
lastRequest = xmlHttp;


            var url = "search_kunde.php";
            var params = "suche="+suche;
            
            xmlHttp.open("POST", url, true);
            
            //Headerinformationen für den POST Request
            xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlHttp.setRequestHeader("Content-length", params.length);
            xmlHttp.setRequestHeader("Connection", "close");                    
        
            xmlHttp.onreadystatechange = function () {
                if (xmlHttp.readyState == 4) {
                    // Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
                    document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
                }
            };              
            xmlHttp.send(params);
        }           
    }

Nicht gerade schön und ungetestet. Aber etwa auf diese Art könnte es funktioneiren (Jedesmal wenn du einen neuen Request machst, wird der alte abgebrochen).
 

Neue Beiträge

Zurück