webForumDet fria alternativet
Logga in / Bli medlem

ajax + firefox + massor av requests?

JavaScript

2 svar · 670 visningar · startad av UrMe

Medlem sedan apr. 2001762 inlägg
Frågan#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;
	 }
  }
}
Medlem 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

Medlem 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 :)

254 ms totalt · 4 externa anrop · v20260731065814-full.05830320
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)