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

readyState == 4 - AJAX

Estas en el tema de readyState == 4 - AJAX en el foro de Frameworks JS en Foros del Web. Hola, mi problema es el siguiente: estoy aprendiendo Ajax y todo hiba bien hasta que me toque con el envio de datos con Ajax via ...
  #1 (permalink)  
Antiguo 16/12/2011, 14:29
 
Fecha de Ingreso: diciembre-2011
Mensajes: 26
Antigüedad: 13 años
Puntos: 5
Pregunta readyState == 4 - AJAX

Hola,

mi problema es el siguiente:
estoy aprendiendo Ajax y todo hiba bien hasta que me toque con el envio de datos con Ajax via POST, lo que hago es lo siguiente:
Envio los datos con ajax a un archivo PHP ("proc.php") que me crea un fichero de texto ("com.txt") con los datos que ingresa el usuario en el formulario ("index.php"), el fichero se crea bien con los datos que se le pide que ponga pero el readyState no llega al estado 4 y aun asi el fichero se ha creado, y como el readyState no llega a 4 el div de respuesta no me muestra el mensaje que deberia mostrar al acabar de realizar la accion...

aqui les dejo los archivos que he usado, el "func.js" es el k contiene las funciones ajax.


index.php:
Código HTML:
<html>
    <head>
        <title>AJAX</title>
        <link rel="stylesheet" href="styles.css" />
        <script language="javascript" type="text/javascript" src="func.js"></script>
    </head>
    <body>
        <form action="proc.php" method="post" id="form">
            Nombre: <input type="text" name="name" id="name" size="20" />
            <br />
            Comentarios: <textarea name="coments" id="coments" rows="5" cols="20"></textarea>
            <br />
            <input type="submit" id="sub" value="Enviar" />
        <div id="res"></div>
        <a href="com.txt">Ver comentarios</a>
        </form>
    </body>
</html> 
func.js:
Código PHP:
addEvent(window"load"initfalse); //esta funcion esta creada en la ultima parte del arhchivo para comprobar el navegador. Es como attachEvent o addEventListener

function init() {//funcion k se ejecuta al inicio
    
var document.getElementById("form"); //selecciono el formulario del index
    
addEvent(f"submit"submitdfalse); // le añado un evento para cuando se envie el formulario
}

function 
submitd(e) { //esta funcion es para detener el envio del formulario para procesarlo con ajax, dependiendo que navegador sea
    
if(window.event) {
        
window.event.returnValue false;
    }
    else if(
e) {
        
e.preventDefault();
    }
    
submit(); // ejecuto la funcion para el envio con ajax
}

function 
data() { // esta funcion la uso para ordenar los datos k le voy a enviar a mi archivo php
    
var cad "";
    var 
document.getElementById("name").value//selecciono el input name del index
    
var document.getElementById("coments").value// selecciono el input coments del index
    
cad "n="+encodeURIComponent(n)+"&c="+encodeURIComponent(c); // aqui ordeno los dos valores
    
return cad// retorno la cadena
}

var 
http;
function 
submit() { // esta es la funcion encargada del envio POST al archivo "proc.php"
    
http xhr(); // instancio el objeto XMLHTTPREQUEST
    
http.onreadystatechange process// ejecuto la funcion process() que esta creada mas abajo
    
http.open("POST""proc.php"true); // aqui preparo el envio
    
http.setRequestHeader("Content-Type""application/x-www-form-urlencoded"); // envio los datos como un tipo form
    
http.send(data()); // envio los datos k estan ordenados en la funcion de arriba data()
}

function 
process() { // esta funcion no me muestra el gracias porque nunca llega al readyState = 4
    
var document.getElementById("res"); // este es el div para mostrar el resultado
    
if(http.redyState == 4) {
            
r.innerHTML "Gracias.";
    }
    else {
        
r.innerHTML "Procesando...";
    }
}

function 
xhr() { // para crear el XMLHTTPREQUEST
    
if(window.XMLHttpRequest) {
        return new 
XMLHttpRequest();
    }
    else if(
window.ActiveXObject) {
        return new 
ActiveXObject("Microsoft.XMLHTTP");
    }
}


//Esta funcion es para crear eventos segun el navegador =D
function addEvent(eevfb) {if(e.attachEvent) {e.attachEvent("on"+ev,f);return true;} else if(e.addEventListener) {e.addEventListener(evfb);return true;} else {return false;}} 
proc.php:
Código PHP:
<?php
header
("Content-Type: text/html; charset=ISO-8859-1");

$o fopen("com.txt""a") or die("No se pudo abrir el archivo.");
fputs($o"Nombre: ".$_POST["n"]."\n");
fputs($o"Comentarios: ".$_POST["c"]."\n\n");
fclose($o);
?>
Espero me puedan ayudar...
Gracias...
  #2 (permalink)  
Antiguo 16/12/2011, 15:11
 
Fecha de Ingreso: febrero-2011
Mensajes: 18
Antigüedad: 13 años, 9 meses
Puntos: 9
Respuesta: readyState == 4 - AJAX

te recomiendo usar jQuery para el manejo de ajax, es excelente este framework, practicamente puedes hacer de todo con el metodo $.ajax

http://api.jquery.com/jQuery.ajax/

ejemplo de como lo utilizo:

para respuestas html:

$.ajax({
async:true,
url: "archivo.php",
cache: false,
dataType: 'html',
type: 'POST',
data: 'cod=45',
success: function(http_response){
$('#elemethtml').html(http_response);
}
});

para json:

$.ajax({
async:true,
url: "causas_falla.php",
cache: false,
dataType: 'json',
type: 'POST',
data: 'cod_m='+cod_material,
success: function(data){
for(i=0; i < data.length; i++){
$('#causa_f').append('<option value="'+data[i].cod_causa+'">'+data[i].desc+'</option>');
}
}
});
  #3 (permalink)  
Antiguo 16/12/2011, 15:14
 
Fecha de Ingreso: diciembre-2011
Mensajes: 26
Antigüedad: 13 años
Puntos: 5
Respuesta: readyState == 4 - AJAX

gracias dannyalfonzo, pero si he usado Jquery pero me quise meter para conocer internamente como funciona todo...
  #4 (permalink)  
Antiguo 19/12/2011, 06:36
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: readyState == 4 - AJAX

eso proviene de no evaluar http.status == 200, consulte un manual de AJAX
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: ajax, asincronico, asincrono, async, javascript, readystate
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 11:01.