Foros del Web » Programando para Internet » Javascript »

Problema con ajax

Estas en el tema de Problema con ajax en el foro de Javascript en Foros del Web. Muy buenas y muchas gracias por vuestro tiempo. Os cuento un problema que se me ha atragantado. Estoy haciendo mis primeras cosillas con ajax y ...
  #1 (permalink)  
Antiguo 19/10/2007, 06:39
 
Fecha de Ingreso: abril-2007
Mensajes: 3
Antigüedad: 17 años, 7 meses
Puntos: 0
Problema con ajax

Muy buenas y muchas gracias por vuestro tiempo. Os cuento un problema que se me ha atragantado.
Estoy haciendo mis primeras cosillas con ajax y todo iba muy bien hasta que me he topado con el siguiente caso. Desde mi página "p2.asp" necesito acceder a una variable javascript la cual se declara en "p3.asp". Es decir desde p2.asp hago una llamada asíncrona a p3.asp. Intento consultar el contenido de la variable que se debería haber declarado y me dice que no está definida. Os pongo el código de las dos páginas a ver si alguien me puede ayudar a solucionarlo.
Un saludo a todos.

p2.asp
<html>
<head>
<script language="javascript" type="text/javascript">
var enProceso = false; // lo usamos para ver si hay un proceso asíncrono activo
var http = getHTTPObject(); // Creamos el objeto XMLHttpRequest

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;
}

function llamadaajax()
{
if (!enProceso && http)
{
var url = "p3.asp";
http.open("GET", url, true);
http.onreadystatechange = controlHttpRespuesta;
enProceso = true;
http.send(null);
}
}

function controlHttpRespuesta()
{
if (http.readyState == 4) {
if (http.status == 200) {
if (http.responseText.indexOf("invalid") == -1) {
document.getElementById("midiv").innerHTML =http.responseText;
enProceso = false;
}
}
}
}

function consultavalor()
{
alert(variablejs);
}
</script>
<title>Ajax: consulta variable js</title>
</head>

<body>
<a href="javascript:llamadaajax()">llamada asíncrona</a><br>
<a href="javascript:consultavalor()">consultar valor de variable</a>
<div id="midiv" ></div>
</body>
<html>


p3.asp
<%response.write "<script type=""text/javascript"">var variablejs=""adios""</script>"%>
  #2 (permalink)  
Antiguo 19/10/2007, 14:14
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 8 meses
Puntos: 88
Re: Problema con ajax

seria bueno declarar la variable en P2.asp, y en p3.asp solo asignarle el valor
y punto numero 2, aun cuando este tipo de asignaciones las crees en otra pagina
debes ponerle el ";", al final de la instruccion

Cita:
<%response.write "<script type=""text/javascript"">var variablejs=""adios"";</script>"%>


Anexo... me he dado cuenta que sigue sin funcionar
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra

Última edición por Shiryu_Libra; 19/10/2007 a las 14:19
  #3 (permalink)  
Antiguo 19/10/2007, 15:06
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Re: Problema con ajax

Hola, te paso unas modificaciones y algunos comentarios:

p2.asp:

Código:
<html>
<head>
<script language="javascript" type="text/javascript">
var enProceso = false; // lo usamos para ver si hay un proceso asíncrono activo
var http = getHTTPObject(); // Creamos el objeto XMLHttpRequest

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;
}

function llamadaajax()
{
if (!enProceso && http)
{
var url = "p3.asp";
http.open("GET", url, true);
http.onreadystatechange = controlHttpRespuesta;
enProceso = true;
http.send(null);
}
}

function controlHttpRespuesta()
{
if (http.readyState == 4) {
if (http.status == 200) {
if (http.responseText.indexOf("invalid") == -1) {
document.getElementById("midiv").innerHTML = http.responseText;
variablejs = http.responseText;
enProceso = false;
}
}
}
}

function consultavalor()
{
alert(variablejs);
}
</script>
<title>Ajax: consulta variable js</title>
</head>

<body>
<a href="javascript:llamadaajax()">llamada asíncrona</a><br>
<a href="javascript:consultavalor()">consultar valor de variable</a>
<div id="midiv"></div>
</body>
<html>
p3.asp
Código:
<%
'así funciona para el innerHTML:
response.write "adios"

'así NO funciona para el innerHTML:
'además, la variable variablejs está mal definida de esta manera. Jamás será una variable de javascript.
'response.write "<script type=""text/javascript"">var variablejs=""adios""</script>"
%>

Cita:
seria bueno declarar la variable en P2.asp, y en p3.asp solo asignarle el valor
Como dice Shiryu_Libra, la variable debe ser declarada dentro de p2.asp... en realidad, dentro de la función. En p3.asp no podés ni declarar la variable ni asignarle valor puesto que se trata simplemente de una salida de texto... no es javascript, por más que lo pongas dentro de etiquetas de <script>


Cita:
...debes ponerle el ";", al final de la instruccion
El punto y coma se usa para separar múltiples instrucciones, pero cuando se trata de una sola instrucción in-line no es necesario
__________________
...___...

Última edición por AlZuwaga; 19/10/2007 a las 15:11
  #4 (permalink)  
Antiguo 19/10/2007, 15:14
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Re: Problema con ajax

Otra cosa... la variable variablejs sólo estará disponible si previamente se ejecuta la función controlHttpRespuesta()... o sea, si primero se hace click sobre el enlace llamada asíncrona antes de hacerlo sobre consultar valor de variable
__________________
...___...
  #5 (permalink)  
Antiguo 19/10/2007, 15:31
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 8 meses
Puntos: 88
Re: Problema con ajax

perfecto Master Chief A_Z
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #6 (permalink)  
Antiguo 22/10/2007, 00:16
 
Fecha de Ingreso: abril-2007
Mensajes: 3
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Problema con ajax

Disculpad que hasta hoy no haya podido ver vuestros comentarios. Muchas gracias por vuestras ideas y por vuestro tiempo. Deciros que el ejemplo expuesto es la síntesis de mi problema. En la práctica p3.asp debe consultar una base de datos y crear dinámicamente variables javascript que luego se usan para crear div con efecto acordeón, por lo que no es posible declararlas en p2.asp.
Esta sería la sentencia real que en p2.asp funciona perfectamente pero cuando intento llevármelo a otra página para hacer la consulta asíncrona, deja de funcional.

<%response.write "<script type=""text/javascript"">var collapse" & iddato & "=new animatedcollapse(""div" & iddato & """, 800, true);</script>" %>

Como véis el tema es un poco más complicado de lo que parece. Lo dicho. Muchas gracias por vuestras ideas y si se os ocurre algo nuevo os lo agradezco.
  #7 (permalink)  
Antiguo 22/10/2007, 13:06
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Re: Problema con ajax

Me parece que vas a obtener más respuestas si trasladamos este mensaje al foro javascript.

Un saludo
__________________
...___...
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:48.