Foros del Web » Programando para Internet » Javascript » Frameworks JS »

script que no funciona

Estas en el tema de script que no funciona en el foro de Frameworks JS en Foros del Web. Hola gente! Estoy siguiendo un tutorial de ajax, pero quedé frenada en un ejemplo, (al cual le modifique la parte del servidor) aparentemente, el evento ...
  #1 (permalink)  
Antiguo 11/10/2007, 10:32
Avatar de Jesica  
Fecha de Ingreso: agosto-2007
Mensajes: 78
Antigüedad: 16 años, 9 meses
Puntos: 0
script que no funciona

Hola gente!
Estoy siguiendo un tutorial de ajax, pero quedé frenada en un ejemplo, (al cual le modifique la parte del servidor) aparentemente, el evento responde, pero no devuelve nada.

les paso el codigo para ver si alguien me puede dar una mano... y tambien la pagina de donde lo saque http://www.w3schools.com/ajax/ajax_responsexml.asp


Código HTML:
<head>
<script src="selectcustomer_xml.js"></script>
</head>
<body>
<form action=""> 
Select a Customer:
<select name="customers" onchange="showCustomer(this.value)">
<option value="ALFKI">Alfreds Futterkiste</option>
<option value="NORTS ">North/South</option>
<option value="WOLZA">Wolski Zajazd</option>
</select>
</form>
<b><span id="companyname"></span></b><br />
<span id="contactname"></span><br />
<span id="address"></span>
<span id="city"></span><br/>
<span id="country"></span>
</body> 

Código HTML:
var xmlHttp
function showCustomer(str)
{ 
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }
var url="getcustomer_xml.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}
function stateChanged() 
{ 
if (xmlHttp.readyState==4)
{
var xmlDoc=xmlHttp.responseXML.documentElement;
document.getElementById("companyname").innerHTML=
xmlDoc.getElementsByTagName("compname")[0].childNodes[0].nodeValue;
document.getElementById("contactname").innerHTML=
xmlDoc.getElementsByTagName("contname")[0].childNodes[0].nodeValue;
document.getElementById("address").innerHTML=
xmlDoc.getElementsByTagName("address")[0].childNodes[0].nodeValue;
document.getElementById("city").innerHTML=
xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue;
document.getElementById("country").innerHTML=
xmlDoc.getElementsByTagName("country")[0].childNodes[0].nodeValue;
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
return xmlHttp;
}

Código PHP:
echo "<?xml version='1.0' encoding='ISO-8859-1'?>";
echo "<company>";
echo "<compname> AAAA </compname>";
echo "<contname> BBB </contname>";
echo "<address>VVV</address>";
echo "<city> DDDD </city>";
echo "<country> XXX</country>";
echo "</company>";
Desde ya muchas gracias
  #2 (permalink)  
Antiguo 11/10/2007, 12:46
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Re: script que no funciona

En el archivo PHP te falta informarle al navegador que le estas enviando un XML mediante la función header. Tu código quedaría:

Código PHP:
<?php
header
("Content-type: text/xml");
echo 
"<?xml version='1.0' encoding='ISO-8859-1'?>"
echo 
"<company>"
echo 
"<compname> AAAA </compname>"
echo 
"<contname> BBB </contname>"
echo 
"<address>VVV</address>"
echo 
"<city> DDDD </city>"
echo 
"<country> XXX</country>"
echo 
"</company>"
?>
Te recomiendo que para testear tus aplicaciones AJAX utilices el Firefox con la extensión Firefug, la cual te permite monitorear todo el proceso de petición asíncrona y evita muchos dolores de cabeza.

Saludos.
__________________
R4DS en español | R4DS en inglés

Última edición por zaqpz; 11/10/2007 a las 13:41
  #3 (permalink)  
Antiguo 12/10/2007, 11:15
Avatar de Jesica  
Fecha de Ingreso: agosto-2007
Mensajes: 78
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: script que no funciona

Muchas gracias, era ese el problema, me olvide de eso...

Ahora estoy tratando de hacer funcionar el mismo ejemplo de ajax con datos que provienen de un servidor remoto, el cual recibe como parámetros accion=listar y devuelve un archivo xml, por ej. http://servidor/archivo.php?accion=listar.
Probé poniendo la dirección web en lugar del archivo (getNosecuantocustomer), pero no logro hacerlo funcionar. Estoy haciendolo de manera correcta?

saludos
  #4 (permalink)  
Antiguo 12/10/2007, 12:56
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Re: script que no funciona

No es posible lograr que el objeto XMLHTTPRequest envíe peticiones a servidores remotos debido a las políticas de seguridad de los navegadores. Aún así existen algunos "trucos" para lograr esta funcionalidad.
Uno de ellos, si tenemos acceso a la configuración del servidor Apache, es este: http://www.ribosomatic.com/articulos...ajax-y-apache/
Otra opción, a mi parecer la más prolija, es que tu objeto XMLHTTPRequest siga enviando la petición a tu archivo PHP en tu servidor, y que sea ese archivo PHP quien se encargue de abrir una conexión con el servidor remoto, consumir el XML y retornalo al cliente.
Existen otras soluciones basadas en hacer que el usuario cambie las políticas de seguridad de su navegador, pero lógicamente no resultan para nada útiles.

Saludos.
__________________
R4DS en español | R4DS en inglés
  #5 (permalink)  
Antiguo 30/10/2007, 09:01
Avatar de Jesica  
Fecha de Ingreso: agosto-2007
Mensajes: 78
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: script que no funciona

gracias zaqpz, de esa manera lo estoy haciendo, con un archivo php; esta es la forma en que se genera el xml en el server:
Código PHP:
<?php header("Content-type: text/xml"); 
echo 
"<?xml version='1.0' encoding='ISO-8859-1'?>";
echo 
"<xml> ";
echo 
"<lab>" ;
echo 
"<id>1</id>";
echo 
"<nombre>lab 1</nombre>";
echo 
"<ubicacion>ubicacion del 1 </ubicacion>";
echo 
"<responsable>responsable del 1</responsable>";
echo 
"</lab>";
echo 
"<lab> ";
echo 
"<id>2</id>";
echo 
"<nombre>lab 2</nombre> ";
echo 
"<ubicacion>ubicacion del 2 </ubicacion>";
echo 
"<responsable>responsable del 2</responsable>";
echo 
"</lab> ";
echo 
"</xml> ";

y la forma en que lo llamo es de esta manera:

var url="http://servidor/archivo.php";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
oXML = AJAXCrearObjeto();
oXML.open("GET", url, true);
oXML.onreadystatechange = leerDatos;
oXML.send(null);


cuando ejecuto en el navegador el php solo, me muestra bien el xml y cuando en la aplicación cambio url por el nombre del archivo (el xml) en forma local lo procesa correctamente, en que estoy fallando?

gracias desde ya
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:59.