webForumDet fria alternativet

ajax + firefox + massor av requests?

2 svar · 668 visningar · startad av UrMe

UrMeMedlem sedan apr. 2001762 inlägg
#1

Jag har ett formulär som kollar både om emailen är korrekt skriven och om den redan finns i databasen. Varje gång man skriver en bokstav så körs scriptet. Problemet jag har är att jag får javascriptfel i firefox i alla fall.

Förmodligen för att den inte har hunnit köra klart den första requesten när den andra görs? Har försökt söka på google men inte hittat någon lösning som jag har förstått.

Allting fungerar precis som det ska förutom att jag ibland får tillbaka ett tomt resultat, alltså ingenting skickas som jag antar beror på javascriptfelet.

Har testat i Internet Explorer 7 och där fungerar det smärtfritt, väldigt bra faktiskt.

Detta är felmeddelandet:

uncaught exception: [Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIXMLHttpRequest.send]" 
nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)" location: "JS frame :: javascript: eval(__firebugTemp__); :: anonymous :: line 1" data: no]

Hur ska jag ändra i ajaxkoden för att t.ex avbryta en pågående request om en ny kommer? Det borde ju lösa det?

Så här ser det ut:

Inputfältet:

<input type="text" id="email" name="email" class="inputtext1" onKeyUp="javascript:checkEmail(this.value);"/>

Ajax-funktionen:
(Kommer utveckla denna så den inte räknar med ctrl, alt, shift tror jag)

function createXMLHttpRequest() {
  var ua;
  if(window.XMLHttpRequest) {
    try {
      ua = new XMLHttpRequest();
    } catch(e) {
      ua = false;
    }
  } else if(window.ActiveXObject) {
    try {
      ua = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
      ua = false;
    }
  }
  return ua;
}

var req = createXMLHttpRequest();

function checkEmail(email) {
	req.open("GET", "includes/ajax/newsubscriber.ajax.php?action=checkemail&email="+escape(email), true);
	req.onreadystatechange = handleCheckEmailResp;
	req.send(null);
}

function handleCheckEmailResp() {
  if(req.readyState == 4){
	 if (req.responseText == "Valid!") {
		document.getElementById('validimage').innerHTML = "<img src=\"images/valid.png\" alt=\"\">";
		document.getElementById('validtext').innerHTML = "Godkänd!";
		document.getElementById('btnSave').disabled = false;
	 } else if(req.responseText == "Exists!") {
		document.getElementById('validimage').innerHTML = "<img src=\"images/invalid.png\" alt=\"\">";
		document.getElementById('validtext').innerHTML = "Existerar!";
		document.getElementById('btnSave').disabled = true;
	 } else if(req.responseText == "inValid!") {
		document.getElementById('validimage').innerHTML = "<img src=\"images/invalid.png\" alt=\"\">";
		document.getElementById('validtext').innerHTML = "Ej godkänd!";
		document.getElementById('btnSave').disabled = true;
	 } else {
		document.getElementById('validtext').innerHTML = req.responseText;
	 }
  }
}
Peter SMedlem sedan dec. 20025 483 inlägg
#2

Kan följande vara till hjälp?
http://www.quirksmode.org/blog/archives/2005/09/xmlhttp_notes_a_1.html

UrMeMedlem sedan apr. 2001762 inlägg
#3

Jag hittade den där också, och läste igenom allt men jag hittade ingen direkt lösning de kommit fram till, i alla fall ingen som jag förstod :)

126 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)