Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks JS (http://www.forosdelweb.com/f127/)
-   -   Una duda sobre varios llamados (http://www.forosdelweb.com/f127/duda-sobre-varios-llamados-442546/)

KarenFerreira 12/11/2006 16:43

Una duda sobre varios llamados
 
Hola,

Bien, pues estoy empezando a usar ajax, y me asalta una duda, he visto que para llamadas simultáneas se debe instanciar un array de objetos xmlhttprequest, pero no creo haber entendido bien. Lo que yo estoy haciendo es poner un formulario en la página que valida los datos ingresados por el usuario, si estan correctos, cambia los textbox por etiquetas div y activa otro formulario en la parte inferior de la página, pero cuando voy a enviar los datos de ese formulario, me aparece un error, y no me devuelve nada... eso es por no haber creado el array?

MaBoRaK 12/11/2006 18:26

loading..............


pueden muchas razones, menos la que nombras.
porque no pegas el codigo?



connection closed.

KarenFerreira 13/11/2006 09:55

Bueno, descubrí que no es por el array, como no hago llamadas simultáneas no lo necesito, pero ahora me apareció otro problema, resulta que tengo el siguiente código en html y asp:

Código HTML:

                sql_suscripciones = "SELECT * FROM suscripcion"
                Set rs_suscripciones = Server.CreateObject("ADODB.Recordset")
                rs_suscripciones.ActiveConnection = MM_news_STRING
                rs_suscripciones.Source = sql_suscripciones
                rs_suscripciones.CursorType = 1
                rs_suscripciones.CursorLocation = 2
                rs_suscripciones.LockType = 1
                rs_suscripciones.Open()
<select name="suscripciones" class="tb5" id="suscripciones" onChange="activacomplemento();">
                <option value="0" selected>Seleccione una</option>
            <%   
                rs_suscripciones.movenext           
                do while not rs_suscripciones.eof
          %>

                <option value="<%=rs_suscripciones("id_suscripcion")%>"><%=rs_suscripciones("nombre")%></option>
            <%           
                    varredim = cint(rs_suscripciones("id_suscripcion"))+1
                    redim preserve descripciones(varredim)
                    descripciones(varredim-1) = rs_suscripciones("descripcion")
                    rs_suscripciones.movenext
                loop
            %>
   
            </select>


Lo que hago es mostrar al usuario los tipos de suscripciones disponibles:
1 - Demostracion
2 - Instantánea y única
3 - Por número de sesiones
4 - Por periodo de tiempo
5 - Dominical

Cuando selecciono una opcion llamo a la función activacomplemento(), que despliega otro select para escoger el número de sesiones, en caso tal que la opción seleccionada sea la 3, o el número de meses que el usuario quiere que dure la suscripción en caso de ser seleccionadas las opciones 4 o 5. Además, le debe mostrar al usuario una descripción de la suscripción seleccionada.

Esta es la función activacomplemento()

Código HTML:

function activacomplemento()
{
    if(document.getElementById("suscripciones").value == 3)
    {
        document.getElementById("complemento").innerHTML = "Número de consultas desadas:";
        document.getElementById("consultas").style.display = "";
        document.getElementById("consultas").disabled = false;
        document.getElementById("meses").style.display = "none";
        document.getElementById("meses").disabled = true;
    }
    else if(document.getElementById("suscripciones").value == 4 || document.getElementById("suscripciones").value == 5)
    {
        document.getElementById("complemento").innerHTML = "Número de meses que durará la suscripción:";
        document.getElementById("meses").style.display = "";
        document.getElementById("meses").disabled = false;
        document.getElementById("consultas").style.display = "none";
        document.getElementById("consultas").disabled = true;
    }
    else
    {
        document.getElementById("complemento").innerHTML = "";
        document.getElementById("meses").style.display = "none";
        document.getElementById("meses").disabled = true;
        document.getElementById("consultas").style.display = "none";
        document.getElementById("consultas").disabled = true;
    }
   
    var id_suscripcion = document.getElementById("suscripciones").value;
    alert(id_suscripcion);
    if (!enProceso && http) {
      var url = "descripcion.asp?id_suscripcion="+id_suscripcion;
      alert(url);
      http.open("GET", url, true);
      alert(http.readyState);
      http.onreadystatechange = handleHttpResponse;
      enProceso = true;
      http.send(null);
    }
}

Para mostrar la descripción hago una llamada al script descripcion.asp, que me devuelve dos parámetros, el número de funcion que debe manejar el resultado, y el resultado pertinente dentro de una misma cadena, pero separados por comas.

2,resultadodelaconsulta

La funcion handleHttpResponse es la siguiente

Código HTML:

function handleHttpResponse() {
    if (http.readyState == 4) {
      if (http.status == 200) {
          if (http.responseText.indexOf('invalid') == -1) {
            // Armamos un array, usando la coma para separar elementos
            results = http.responseText;
            alert(results);
              enProceso = false;
            http.close;
            manejaresultados(results);
          }
      }
    }
}

function getHTTPObject() {
 if(navigator.appName == 'Microsoft Internet Explorer') {
  http = new ActiveXObject('Microsoft.XMLHTTP');
 } else {
  http = new XMLHttpRequest();
 }
 return http;
}
var enProceso = false;
var http = getHTTPObject();

function manejaresultados(results)
{
    results1 = results;
    temp = results1.split(",");
    if(temp[0] == 1)
    {formulario1(results1);}
    if(temp[0] == 2)
    {formulario2(results1);}
}

function formulario2(results)
{
    results1 = results.split(",");
    alert (results1);
    document.getElementById("descripcion").innerHTML = results1[1];
}

En este caso particular uso la funcion formulario2, y funciona perfecta, excepto cuando selecciono la opcion 4 o 5. En IE me muestra un error de javascript que dice:

Cita:

Línea : 10
Car : 11
Error : System error : -1072896748
Codigo : 0
url : http://localhost/enewspaper/suscripcion.asp
pero en firefox no me dice nada, todo sale perfecto, alguna sugerencia en cuanto al motivo que hace que la cosa no funcione como deberia en IE?

MaBoRaK 13/11/2006 15:52

loading...........



donde te marca error?

if (http.responseText.indexOf('invalid') == -1) {
// Armamos un array, usando la coma para separar elementos
results = http.responseText;
alert(results);
enProceso = false;
http.close;
manejaresultados(results);
}

antes o despues de:
results = http.responseText;
alert(results);


si es, despues. de eso

results1 = results.split(",");
alert (results1);
document.getElementById("descripcion").innerHTML = results1[1];

segura que existe results1[1]?


connection closed.


connection closed.

KarenFerreira 13/11/2006 17:15

Retomemos... la cosa esta en que terminé cambiando el metodo de get a post porque leyendo y leyendo en Internet, encontré que el método get suele ser problemático a veces para usar AJAX. Ahora tengo otro problema...

Yo trabajo con asp, pero resulta, que cuando voy a querer enviar por el método post los datos me sale un error en la linea que menos me lo hubiera esperado...

Código HTML:

var url = "descripcion.asp";
var parametros ='id_suscripcion='+id_suscripcion;
        http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');// ---> Aquí me sale el error, y dice "error desconocido"       
      http.open("POST", url, true);
      http.send(parametros);
      http.onreadystatechange = function()
    {
        if (http.readyState==4)
        {
            results = http.responseText
        }
    }

No se porque, llegue a pensar que es porque el archivo descripcion.asp tiene algunas cabeceras para evitar la caché, pero se las quité y aún así sigue sin funcionar, tendrá algo que ver con la configuración del IIS?

no se si le estoy enviando mal las cabeceras, o es porque e

KarenFerreira 13/11/2006 18:05

Ya pude solucionarlo!!, es que yo soy como medio lenteja, pero bueno, lo importante es que como estaba usando el mismo objeto para hacer una llamada por metodo get y hacer la del método post, no me estaba funcionando, entonces cree otro objeto aparte y ahi si no molesta para nada la cosa... muchisimas gracias de todas formas MaBoRaK, el tutorial de leimnud me sirvio para darme cuenta de cositas...

MaBoRaK 13/11/2006 18:31

loading..........


bueno :D
en el caso de GET siempre usa una variable random, de esa forma no actuara mas el caché.

var url = "descripcion.asp?rand="+Math.random();


connection closed.

KarenFerreira 14/11/2006 09:48

Otro problema, pero al recoger los datos
 
Bien, entre mas avanzo mas cosas raras aparecen. Pues resulta que ya tenia solucionado lo del envío de datos por post, al hacer el envío lo que me devolvía era una cadena de texto extraida de mi base de datos, pero ahora, debo tomar de la base de datos para devolver junto con la cadena, algunos valores que usan decimales, algo asi como 0,5 y 40,5 por poner un ejemplo. El script ASP está devolviendo los valores porque ya lo probé individualmente, pero cuando llegan a javascript, la descripción aparece sin ningún problema, pero los valores decimales se convierten automáticamente en 0 (ceros), y no tengo la más mínima idea de porque. Estoy haciendo un cstr(variable), a las dos variables numéricas decimales antes de devolverlas de ASP, pero nada parece funcionar... alguna idea al respecto?

vengava 14/11/2006 11:06

Prueba a devolver los números decimales con punto en lugar de coma.

KarenFerreira 14/11/2006 13:37

Ya habia probado eso también y no me funciona... que será???

KarenFerreira 14/11/2006 14:57

Bueno, retomando, la cosa va en que estoy multiplicando los valores por mil antes de enviarlos, pero ni asi, me sigue recibiendo cero... alguna otra idea?

MaBoRaK 14/11/2006 15:11

loading........



bueno siempre MUESTRA LA PARTE DE CODIGO QUE CREES QUE FALLA :p

si recibes un valor con ,

var a= "0,76";

le haces alguna operacion? como 98+a;

o

parseInt(0,76)?

en ese caso siempre te devolvera 0

pero si tratas ese valor todo el tiempo como una CADENA nunca cambiara su valor.



connection closed.

KarenFerreira 14/11/2006 15:58

Oki doki, solucionado... gracias!


La zona horaria es GMT -6. Ahora son las 06:24.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.