PDA

View Full Version : [HTTP/XML/etc.] Upload file asincrono


Dawidh
26-05-2009, 16:17
Salve, ho un problemone...

Mi è stato detto (dal mio relatore di tesi, non da mio cuggino), che è possibile in qualche modo fare un upload di un file in maniera "asincrona utilizzando una connessione parallela a quella HTTP (o robe del genere) su cui passa XML. Al massimo, si dovrebbe "serializzare" il file binario per trasmetterlo dentro ad un documento XML."

Al momento io utilizzo il framework ExtJs, che in automatico, quando devo fare l'upload, crea un tag <iframe> che utilizza per fare l'uplaod effettivo, come se fosse asincrono, ma non lo è effettivamente.

Ne sapete qualcosa? potete aiutarmi con qualche guida, un metodo da utilizzare.. qualsiasi cosa..

Grazie e ciao..

Dawidh
28-05-2009, 15:47
uppino.. proprio nessuno con qualche idea?

Ikon O'Cluster
28-05-2009, 19:46
In parte forse posso aiutarti... però dopo cena :)

Ikon O'Cluster
28-05-2009, 20:19
File ajax.html
<html>

<head>

<title>Caricamento testo</title>
<script type="text/javascript" src="script.js"></script>
<style type="text/css" media="all">

body {
font-family: Verdana, Helvetica, sans-serif;
font-size: 9pt;
background: #FFF;
color: #000;
}

h1 {
font-size: 12pt;
border-bottom: 1px solid silver;
color: #009;
}

</style>

</head>

<body>

<div>

<h1>Richiesta testuale</h1>
<div id="dynamic">

Per cambiare questo contenuto &egrave sufficiente clickare su

<!-- La richiesta funziona anche se il browser non supporta AJAX -->
<a href="prova.txt"
onclick="return loadText(this.href);"
onkeypress="return this.onclick();"
tabindex="1">questo link</a>.

</div>

</div>

</body>

</html>

File script.js
function myRequest(url, handler, args) {

function requestComplete() {

// Occorre gestire tutte le eccezioni per evitare che l’intera
// esecuzione si blocchi a causa di un errore nei parametri…
try {

// Valori minori di 4 indicano una richiesta non completata.
if(request.readyState != 4)
return;

// A questo punto può essere chiamato l’handler al quale
// passare risposta del server e argomento
// specificato dall’utente.
if(handler == null)
return;

handler(request, args);

} catch(e) {

// gestione errori…

}

};

function newRequest() {

var xmlHttp;

try {

// Si tratta di Mozilla, Firefox, Netscape, Opera o Safari?
xmlHttp = new XMLHttpRequest();

} catch(e) {

try {

// Si tratta di Internet Explorer?
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

} catch(e) {

try {

// Altro tentativo per Internet Explorer?
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

} catch(e) {

// Altri tentativi o annullamento
xmlHttp = null;

}

}

}

return xmlHttp;

};

var isAjaxAvailable = false;
var request = newRequest();

if(request) {

isAjaxAvailable = true;
request.open("get", url, true);
request.setRequestHeader("connection", "close");
request.onreadystatechange = requestComplete;
request.send(null);

}

return isAjaxAvailable;

};

function getAnElementById(elementId) {

var element;

if(document.getElementById) {

element = document.getElementById(elementId);

} else {

element = document.all[elementId];

}

return element;

};

function myHandler(request, args) {

var element = getAnElementById("dynamic");

if(request.status != 200) {

element.innerHTML = request.responseText;

} else {

element.innerHTML = "[ERRORE " + request.status + "]";
element.innerHTML += "Impossibile effettuare l'operazione richiesta.";

}

};

function loadText(filename) {

return !myRequest(filename, myHandler, null);

};

File prova.txt:
Testo di prova!

Metti i 3 file nella stessa directory e apri col browser ajax.html. Questo programma fa una richiesta asincrona utilizzando AJAX. Modificando un po' la cosa, al posto di considerare la risposta alla richiesta come testo, puoi considerarla come XML e farne il parsing. Ma questo è il massimo che mi è stato spiegato in un'ora di lezione su AJAX!!!

Alexxio
28-05-2009, 20:29
l'upload via ajax non si può fare a causa di alcune limitazioni con javascript ecc..cmq esistono dei workaround tipo
http://www.captain.at/ajax-file-upload.php

e altri che puoi trovare sulla rete.. boh prova un po' qui..
http://www.codingforums.com/archive/index.php/t-142917.html

Ikon O'Cluster
28-05-2009, 20:33
Ok ho toppato :) non mi ero accorto ke doveva essere un upload :)

Dawidh
29-05-2009, 07:03
Ottimo Alexxio provo a darci un'occhiata, mi sembra sia proprio la cosa che cercavo, adesso mi metto a leggere gli articoli con calma....