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

error en la recepcion de datos

Estas en el tema de error en la recepcion de datos en el foro de Frameworks JS en Foros del Web. saludos, estoy implementando un ejemplo que me dieron en el foro, pero me sigue mandando error, segun veo es que no esta reciviendo los parametros ...
  #1 (permalink)  
Antiguo 16/01/2008, 13:49
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
error en la recepcion de datos

saludos,
estoy implementando un ejemplo que me dieron en el foro,
pero me sigue mandando error, segun veo es que no esta reciviendo los parametros de la pagina esterna, asi que si me pueden dar una ayudita ok les muestro el codigo


esta es mi pagina1.asp aqui tengo el el escrip y los lisbox
<script LANGUAGE="JavaScript" SRC="../include/funciones.js"></script>
<script>
//NO MOVER ESTE CODIGO INFERIOR
function getHTTPObject() {
var xmlhttp;
/*@cc_on
@if (@_jscript_version >= 5)
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) { xmlhttp = false; }
}
@else
xmlhttp = false;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {xmlhttp = new XMLHttpRequest();
} catch (e) { xmlhttp = false; }
}return xmlhttp;}

var enProceso = false; // lo usamos para ver si hay un proceso activo
var http = getHTTPObject(); // Creamos el objeto XMLHttpRequest
//NO MOVER EL CODIGO SUPERIOR

//PROCESO QUE INVOCARA EL METODO DE AJAX
function Cambia_IdVariant(destino,valor) {
if (!enProceso && http) {
var url = "pagina.asp?destino=" + destino + "&value=" + valor + "&guia="+ Math.random();;
http.open("GET", url, true);
http.onreadystatechange = GetData;
enProceso = true;
http.send(null);
}
}

function GetData(){
//proceso completado
if (http.readyState == 4) {
//sin error, se mandan datos al select
if (http.status == 200) {
//todo perfecto, escribiendolos
if (http.responseText.indexOf('invalid') == -1) {
//separamos el control de los datos
// results = http.responseText.split("|");
results = unescape(http.responseText.split("|"));
//en Results[0], estara el nombre del control que tendra los datos
//en Results[1], se encontraran todos los valores
document.getElementById(results[0]).innerHTML = results[1];
//Cerramos el proceso
enProceso = false;
}
}
//en caso de error
else{ alert("Error en la recepcion de datos")
enProceso = false;
}
}
}
</script>

y estos son los lisbox



<tr valign="top">
<td width="98" nowrap><strong>Codigo Fillingsysten:</strong></td>
<td width="261"><div align="left">
<select size="1" name="codigo_filli" id="fill" onChange="Cambia_IdVariant('idvariant',this.value) ">
<option value="">Seleccione</option>
!CODIGO_FILLI! <!--ya saben en este parte esta mi select para q se cargue el lisbos-->
</select></div></td>
</tr>

<tr valign="top">
<td width="98" nowrap><strong>ID Variant:</strong></td>
<td width="261"><div align="left">
<select size="1" name="idvariant" id="idvariant">


</select></div></td>
</tr>

y esta es mi pagina externa osea pagina.asp


<%Dim Conn
'ABRE CONEXION
categoria=request.QueryString("value")
response.write categoria
response.end



Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open CONNECTIONSTRING

'verifico que el querystring, no este vacio
if request.QueryString <>"" then
'tomo el valor del control, que contendra los datos
destino=request.QueryString("destino")
'tomo el valor de la categoria a buscar
categoria=request.QueryString("value")
'creo la consulta
strSQL = "SELECT CODIGO,DESCRIPCION,IDFILLINGSYSTEM FROM VARIANT where IDFILLINGSYSTEM="&categoria&" "
'ejecucion
Set rst = Conn.Execute(strSQL)
'inicializo respuesta en blanco
respuesta=""
if Err=0 then
if rst.EOF =false
'de aki hasta el ultimo dato de la subcategoria
Do While Not rst.EOF
'por primera ves, tomo el valor simple
if respuesta="" then
respuesta= "<option value="""&_
rst("CODIGO")&""""&_
strSelected&">"&_
rst("DESCRIPCION")&"</option>"
'en segundas vueltas, le anexo todos los valores que llegue a encontrar
else
respuesta = respuesta & "<option value=""" & rst("CODIGO") & _
""" "&strSelected&">"&_
rst("DESCRIPCION")&"</option>"
end if
'me muevo al siguiente registro
rst.MoveNext
Loop
'esta parte permitira al control de ajax separar mediante el simbolo "|";
'el control de los datos; en pocas palabras, esta parte es la importante
else
respuesta = "No hay SubCategorias"
end if
else
respuesta = "Error Procesando Datos, contacte al WebMaster"
end if
response.Write destino &"|"& respuesta
end if%>



ok, como veran lo q quiero es cargan un segundo lisbox a partir de un primero osea segun el value de primer lisbox,

gracias por sus comentarios
  #2 (permalink)  
Antiguo 16/01/2008, 14:23
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: error en la recepcion de datos

modifique mi pagina externa osea pagina.asp
creo q en esta pagina todo esta bien, con ecepcion de donde paso los parmetros y donde se reciben en pagina1.asp osea donde esta el script de ajax y los lisbox
le muestro la pagina.asp modificada
<%Dim Conn
'ABRE CONEXION
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open CONNECTIONSTRING
'verifico que el querystring, no este vacio
if request.QueryString <>"" then
destino=request.QueryString("destino")
categoria=request.QueryString("value")
strSQL = "SELECT CODIGO,DESCRIPCION,IDFILLINGSYSTEM FROM VARIANT where IDFILLINGSYSTEM="&categoria&" "
Set rst = Conn.Execute(strSQL)
if not rst.EOF then
Do While Not rst.EOF
respuesta= "<option value="""&rst("CODIGO")&""""& strSelected&">"& rst("DESCRIPCION")&"</option>"
rst.MoveNext
Loop
else
respuesta = "No hay SubCategorias"
end if


else
respuesta = "Error Procesando Datos, contacte al WebMaster"
end if
response.Write destino &"|"& respuesta

%>
  #3 (permalink)  
Antiguo 16/01/2008, 14:27
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: error en la recepcion de datos

ahora me sale un error mas especifico
erro: document.getElementByld[...]'is null or not an object
gracias
  #4 (permalink)  
Antiguo 16/01/2008, 16:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: error en la recepcion de datos

document.getElementById es una función, no una colección, tienes que llamarla asi:
Código:
var object = document.getElementById( "object_id" );
Saludos.
  #5 (permalink)  
Antiguo 17/01/2008, 07:45
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: error en la recepcion de datos

yo estoy recibiendo dos parametros, como quedaria entonces el codigo
este es mi primer script en ajax, asi q no tengo mucho conocimiento,
gracias
  #6 (permalink)  
Antiguo 17/01/2008, 09:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: error en la recepcion de datos

Entiendo, puedes probar asi:
Código:
function GetData(){
      //proceso completado
      if (http.readyState == 4) {
             //sin error, se mandan datos al select
             if (http.status == 200) {
                      //todo perfecto, escribiendolos
                      if (http.responseText.indexOf('invalid') == -1) {
                               //separamos el control de los datos
                               results = http.responseText.split("|");
                           
                               //en Results[0], estara el nombre del control que tendra los datos
                               //en Results[1], se encontraran todos los valores
                               var el = document.getElementById(results[0]);
                               if(!el) alert( "No se encontro el elemento: " + results[0] );
                                
                               el.innerHTML = results[1];
                               //Cerramos el proceso
                               enProceso = false;
                      }
            }
            //en caso de error
            else{ alert("Error en la recepcion de datos")
                enProceso = false;
            }
     }
}
Saludos.
  #7 (permalink)  
Antiguo 17/01/2008, 10:09
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: error en la recepcion de datos

gracias Gato...
lo hice de otro modo y me funciono, auq le falta un detalle...
estoy contenta es mi primer script de ajax,
asi que si me puedes ayudar...
bueno el asusnto es que no se como indico el value y la descripcion en el jscript ya que ahora mismo estoy mandando el mismo valor para el value y la descripcion

te muestro lo que tengo
funciona super bien
la pagina.htm

<script src="prueba.js" language="JavaScript"></script>



<tr valign="top">
<td width="98" nowrap><strong>Codigo Fillingsysten:</strong></td>
<td width="261"><div align="left">
<select size="1" name="filli" id="filli">
<option value="">Seleccione</option>
!CODIGO_FILLI!
</select></div><span id="espera"></span></td>
</tr>



<tr valign="top">
<td width="98" nowrap><strong>ID Variant:</strong></td>
<td width="261"><div align="left">
<select size="1" name="idvariant" id="idvariant"></select></div></td></tr>


el pagina.js


addEvent (window,'load',inicializarEventos,false);

function inicializarEventos()
{
var select1=document.getElementById('filli');
addEvent(select1,'change',mostrarMaterias,false);
}

var conexion1;
function mostrarMaterias(e)
{
var codigo=document.getElementById('filli').value;
if (codigo!=0)
{
conexion1=crearXMLHttpRequest();
conexion1.onreadystatechange = procesarEventos;
conexion1.open('GET','pagina.asp?cod='+codigo, true);
conexion1.send(null);
}
else
{
var select2=document.getElementById('idvariant');
select2.options.length=0;
}
}

function procesarEventos()
{
if(conexion1.readyState == 4)
{
var d=document.getElementById('espera');
d.innerHTML = '';
var xml = conexion1.responseXML;
var pals=xml.getElementsByTagName('idvariant');
var select2=document.getElementById('idvariant');
select2.options.length=0;
for(f=0;f<pals.length;f++)
{
var op=document.createElement('option');
var texto=document.createTextNode(pals[f].firstChild.nodeValue);
op.appendChild(texto);
select2.appendChild(op);
}
}
else
{
var d=document.getElementById('espera');
d.innerHTML = '<img src="../cargando.gif">'; }
}


//***************************************
//Funciones comunes a todos los problemas
//***************************************
function addEvent(elemento,nomevento,funcion,captura)
{
if (elemento.attachEvent)
{
elemento.attachEvent('on'+nomevento,funcion);
return true;
}
else
if (elemento.addEventListener)
{
elemento.addEventListener(nomevento,funcion,captur a);
return true;
}
else
return false;
}

function crearXMLHttpRequest()
{
var xmlHttp=null;
if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else
if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
return xmlHttp;
}


y mi pagina.asp
<!-- #include file ="../include/funciones.asp" -->
<%
Dim Conn
'ABRE CONEXION
Response.ContentType = "text/xml"

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open CONNECTIONSTRING

codigo=request.QueryString("cod")

strSQL = "SELECT CODIGO,DESCRIPCION,IDFILLINGSYSTEM FROM VARIANT where IDFILLINGSYSTEM="&codigo&" "
Set rs = Conn.Execute(strSQL)

rs.MoveFirst()
response.write("<?xml version='1.0' ?>")
response.write("<variant>")
while (not rs.EOF)
response.write("<variantid>")
response.write("<idvariant>" & rs("CODIGO") & "</idvariant>")
response.write("<descripcion>" & rs("DESCRIPCION") & "</descripcion>")
response.write("</variantid>")
rs.MoveNext()
wend
'rs.close()
'conn.close()
response.write("</variant>")
%>


mu pregunta es en pagina.js en esta parte donde cargo mu segundo select como especifico para que el value sea el idvariante
y la descripcion sea la descripcion ose el xml que genero tiene esos dos datos, se que me entiendes

function procesarEventos()
{
if(conexion1.readyState == 4)
{
var d=document.getElementById('espera');
d.innerHTML = '';
var xml = conexion1.responseXML;
var pals=xml.getElementsByTagName('idvariant');
var select2=document.getElementById('idvariant');
select2.options.length=0;
for(f=0;f<pals.length;f++)
{
var op=document.createElement('option');
var texto=document.createTextNode(pals[f].firstChild.nodeValue);
op.appendChild(texto);
select2.appendChild(op);
}
}
else
{
var d=document.getElementById('espera');
d.innerHTML = '<img src="../cargando.gif">'; }
}
aqui se carga el select2


y en la pagina asp tengo
response.write("<idvariant>" & rs("CODIGO") & "</idvariant>")
response.write("<descripcion>" & rs("DESCRIPCION") & "</descripcion>")
me comprendes ?
muchisimas gracias
  #8 (permalink)  
Antiguo 17/01/2008, 10:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: error en la recepcion de datos

Cuando creas tu opción:
Código:
var op=document.createElement('option');
Solo es cuestión de que le agregues el value:
Código:
op.value = 'id_variant';
En este caso no veo claro como es que generas tu XML, podrías poner un ejemplo del XML ya generado?

Saludos.
  #9 (permalink)  
Antiguo 17/01/2008, 11:05
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: error en la recepcion de datos

no te entendi
  #10 (permalink)  
Antiguo 17/01/2008, 11:22
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: error en la recepcion de datos

osea, en estas lineas
lines1= var op=document.createElement('option');
lines2= var texto=document.createTextNode(pals[f].firstChild.nodeValue);
lines3= op.appendChild(texto);
select2.appendChild(op);

se le esta agregando al select 2 en el tag option tanto el value como el text, osea en esta line var texto=document.createTextNode(pals[f].firstChild.nodeValue);
se guardan los dos mencionados ok, yo lo que quiero no es crear otro taga lo que quiero es divir la linea2 en osea en dos, con el fin de darle a value un valor y a text otro valor,
pero no estoy muy clra, estoy tratando de varia manera y me manda error.
me explique?
  #11 (permalink)  
Antiguo 17/01/2008, 12:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: error en la recepcion de datos

No entiendo muy bien cual es tu problema, podrias explicarlo mejor?

Saludos.
  #12 (permalink)  
Antiguo 17/01/2008, 13:17
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: error en la recepcion de datos

Ok, el asunto es este:
1.Cuando tenemos un select tenemos esto
</select><select size="1" name="D1">
<option value=”value”>text</option>
</select></div></td></tr>

El option tiene un value y un text q por lo general el text lo usamos para mostralo al cliente y el value es el que utilizamos como valor ok, asti todo bien

2. Este ejemplo de ajax esta super me funciona bien
El problema es que si se fijan en la pagina.js osea en el jscript , en la función
function procesarEventos()
{
if(conexion1.readyState == 4)
{
var d=document.getElementById('espera');
d.innerHTML = '';
var xml = conexion1.responseXML;
var pals=xml.getElementsByTagName('idvariant');
var des=xml.getElementsByTagName('descripcion');

var select2=document.getElementById('idvariant');
select2.options.length=0;
for(f=0;f<pals.length;f++)
{

var op=document.createElement('option');
var texto=document.createTextNode(pals[f].firstChild.nodeValue);
op.appendChild(texto);
select2.appendChild(op);

}
}
else
{
var d=document.getElementById('espera');
d.innerHTML = '<img src="cargando.gif">'; }
}

Aki es donde cargamos nuestro segundo select
Pero en el value yo le quiero dar un valor y en el text otro valor para que el usuario lo vea x q en el value va es un id y eso el no lo va a entender. Ok
Entonces de la manera que yo lo se hacer es asi
var op=document.createElement('option');
var texto=document.createTextNode(pals[f].firstChild.nodeValue);
op.appendChild(texto);
select2.appendChild(op);
aki que estoy haciendo en el option le estoy asignando tanto al value como al text el mismo valor.
Entonces eso es lo q no quiero, yo quiero al value asigarle el valor que esta en la linea:
var pals=xml.getElementsByTagName('idvariant');
y al text el que esta en esta linea:
var des=xml.getElementsByTagName('descripcion');



si cuando hacemos esto
var texto=document.createTextNode(pals[f].firstChild.nodeValue);
asignamos los dos oses el value y el text
habria q ver como se le asigna por separado y eso es lo que no se hacer.



En cuanto
Al el xml el se genera y queda en memoria y se genera en la pagina.asp

gracias
  #13 (permalink)  
Antiguo 17/01/2008, 13:33
 
Fecha de Ingreso: enero-2006
Mensajes: 233
Antigüedad: 18 años, 11 meses
Puntos: 2
Re: error en la recepcion de datos

Cita:
Iniciado por GatorV Ver Mensaje
Cuando creas tu opción:
Código:
var op=document.createElement('option');
Solo es cuestión de que le agregues el value:
Código:
op.value = 'id_variant';
En este caso no veo claro como es que generas tu XML, podrías poner un ejemplo del XML ya generado?

Saludos.
esto es correcto en un javascript sencillo seria asi
op.value = 'idvariant';
op.text = 'descripcion';
pero en est estamos recogiendo los valores desde el xml
cual seria la sintaxis eso es lo q no se
x q asi no funciona
op.value = 'idvariant';
op.text = 'descripcion';
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 04:25.