Ver Mensaje Individual
  #20 (permalink)  
Antiguo 15/09/2006, 08:06
Avatar de tunait
tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 23 años, 3 meses
Puntos: 381
Cita:
Iniciado por at_elah Ver Mensaje
no soy un erudito en ajax, si bien lo uso constantemente.

Pero de momento, que veo una llamada a una funcionq que envia los datos a una pagina alojada en el server para que este la procese y devuelva una respuesta (proceso en segundo plano), lo considero ajax dentro de lo que estamos hablando.
ok, si consideras que el uso de un iframe para trabajar en segundo plano sin usar el objeto xmlHttpRequest sea también ajax

Ahora bien, lo que en general se conoce (o vende) hoy como AJAX es realizar ese proceso en segundo plano usando el objeto xmlHttpRequest no se aplica al uso de un iframe para enviar información al servidor.

Si te fijas en el código que has citado no se está enviando información ni ningún archivo al servidor mediante ajax si no que está esperando la respuesta de éste tras haberse enviado el archivo con el submit tradicional de un formulario apuntando a un iframe.

Cita:
Iniciado por at_elah Ver Mensaje
Código:
var http = createRequestObject();
var uploader = '';
		  handleResponse
function createRequestObject() {
    var obj;
    var browser = navigator.appName;
    
    if(browser == "Microsoft Internet Explorer"){
        obj = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else{
        obj = new XMLHttpRequest();
    }
    return obj;    
}

function traceUpload(uploadDir) {
         
   http.onreadystatechange = handleResponse;

   http.open("GET", 'imageupload.php?uploadDir='+uploadDir+'&uploader='+uploader); 
   http.send(null);   
}

function handleResponse() {

    if(http.readyState == 4){
        document.getElementById(uploaderId).innerHTML = http.responseText;
        //window.location.reload(true);
    }
    else {
        document.getElementById(uploaderId).innerHTML = "Uploading File. Please wait...";
    }
}

function uploadFile(obj) {
    var uploadDir = obj.value;
    uploaderId = 'uploader'+obj.name;
    uploader = obj.name;
    
    document.getElementById('formName'+obj.name).submit();
    traceUpload(uploadDir, obj.name);    
}
Si te fijas está enviando un null al servidor con AJAX

http.open("GET", 'imageupload.php?uploadDir='+uploadDir+'&uploader= '+uploader);
http.send(null);


y está realizando un submit de un formulario

document.getElementById('formName'+obj.name).submi t();

y este formulario se escibe desde la clase AjaxFileuploader en su método showFileUploader($uploaderId) en donde devuelve un formulario

Código PHP:
return '<form id="formName'.$uploaderId.'" method="post" enctype="multipart/form-data" action="imageupload.php" target="iframe'.$uploaderId.'">
                            <input type="hidden" name="id" value="'
.$uploaderId.'" />
                            <span id="uploader'
.$uploaderId.'" style="font-family:verdana;font-size:10;">
                                Upload File: <input name="'
.$uploaderId.'" type="file" value="'.$uploaderId.'" onchange="return uploadFile(this)" />
                            </span>
                            <iframe name="iframe'
.$uploaderId.'" src="imageupload.php" width="400" height="100" style="display:none"> </iframe>
                        </form>'

...que es el que se encarga de enviar el archivo a través del iframe que está oculto

<form id="formName'.$uploaderId.'" method="post" enctype="multipart/form-data" action="imageupload.php" target="iframe'.$uploaderId.'">

Así que lo único que se está haciendo con ajax es recoger el resultado escrito por el servidor tras recoger el archivo enviado con el formulario a través del iframe, pero enviar con ajax no se está enviando nada.