Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/03/2008, 19:49
Avatar de daniloquispe
daniloquispe
 
Fecha de Ingreso: mayo-2007
Mensajes: 38
Antigüedad: 17 años, 7 meses
Puntos: 0
Desacuerdo The system cannot locate the resource specified

Hola a todos:

Ahora me salta este problema con AJAX: Tengo un formulario que trabaja con una validación en AJAX. El código HTML del formulario tiene esta forma:

Código HTML:
<form id="frmnuevo" action="" method="post" onsubmit="procesarForm(); return false">
  <input type="text" id="nombre" name="nombre" />
  <input type="text" id="email" name="email" />
  <input type="submit" id="btnaceptar" name="btnaceptar" value="Aceptar" />
</form> 
La función procesarForm() tiene esta forma:

Código:
function procesarForm()
{
    var nombre = document.getElementById('nombre').value;
    var email = document.getElementById('email').value;
    ejecutar("scripts/crear.php?nombre=" + nombre + "&email=" + email, procesarRespuesta);
}
donde la función ejecutar es la típica función que crea el objeto XmlHttpRequest y lo prepara para su uso. Su implementación es:

Código:
// Guarda la referencia al objeto XmlHttpRequest
var xmlHttp;

// Recupera el objeto  XmlHttpRequest
function createXmlHttpRequestObject()
{
	// will store the reference to the XMLHttpRequest object
	var xmlHttp;
	// if running Internet Explorer
	if(window.ActiveXObject)
	{
		try
		{
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp = false;
		}
	}
	// if running Mozilla or other browsers
	else
	{
		try
		{
			xmlHttp = new XMLHttpRequest();
		}
		catch (e)
		{
			xmlHttp = false;
		}
	}
	// return the created object or display an error message
	if (!xmlHttp)
		alert("¡Error al crear el objeto XMLHttpRequest!");
	else
		return xmlHttp;
}

// make asynchronous HTTP request using the XMLHttpRequest object
function ejecutar(url, callback)
{
	xmlHttp = createXmlHttpRequestObject();
	// proceed only if the xmlHttp object isn't busy
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
	{
		// execute the quickstart.php page from the server
		xmlHttp.open("GET", url, true);
		// define the method to handle server responses
		xmlHttp.onreadystatechange = callback;
		// make the server request
		xmlHttp.send(null);
	}
	else
		// if the connection is busy, try again after one second
		setTimeout('ejecutar()', 1000);
}
Bueno, en realidad el formulario tiene bastante más campos, y por tanto la función procesarForm es bastante más grande; pero en ambos casos la estructura es la que mostré en este miniejemplo (no puedo poner el código original porque es muy grande y porque en mi trabajo no me permiten publicarlo).

En fin, a lo que iba... He probado este código en 3 navegadores:
  • Internet Explorer 7
  • Mozilla Firefox 2.0.0.12
  • Opera 9.2

En los 2 últimos el código funciona bien; pero cuando lo pruebo en Internet Explorer me salta este mensaje: The system cannot locate the resource specified

Instalé MS Script Debugger y cuando pruebo nuevamente mi código el depurador se detiene en la función ejecutar() que puse arriba, concretamente en esta línea:

Código:
function ejecutar(url, callback)
{
	xmlHttp = createXmlHttpRequestObject();
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
	{
		xmlHttp.open("GET", url, true);
		xmlHttp.onreadystatechange = callback;
		xmlHttp.send(null);  // <---------------- AQUI SE DETIENE EL SCRIPT
	}
	else
		setTimeout('ejecutar()', 1000);
}
No entiendo lo que sucede, ¿alguien me lo puede explicar? ¿Cómo puedo solucionarlo?