Buongiorno,
ho bisogno di eseguire un upload tramite una richiesta asincrona (di modo da poter intercettare l'errore 500 visto che devo uploadare file abbastanza grossi)

la pagina asp usa l'upload di baol e con una richiesta normale (tramite action) funziona bene.

Non funziona affatto se la richiamo tramite ajax.

posto le funzioni ajax:
codice:
function xmlhttpPost(strURL) {
	var formname="loginmod"
	var responsediv="messaggio"
	
    var xmlHttpReq = false;
    var self = this;
	var risultato="";
//	var pulsante=document.getElementById('pulsante')
    // Xhr per Mozilla/Safari/Ie7
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // per tutte le altre versioni di IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
			// Quando pronta, visualizzo la risposta del form
            //updatepage(self.xmlHttpReq.responseText,responsediv);
			
//			var campiobbl=new Array('nome','comune','tel','email','richiesta')
//			var primocampo=false;
			risultato=self.xmlHttpReq.responseText;
			if (strURL=="login-ajax.asp") {
				var arr_ris=risultato.split("|");
				risultato=arr_ris[0];
				switch (risultato) {
					case "erroreuser": 
						showlogin('user');
						break
					case "erroreuserpass":
						showlogin('userpass');
						break
					case "conferma":
						usermail=arr_ris[1];
						showlogin('conferma',usermail);
						break
					case "success":
						var utente=arr_ris[1];
						showlogin(utente);
						break
				}
			}else{
				if (strURL=="password-ajax.asp") {
					alert(risultato);
				}else{
					if (strURL=="Upload_Video.asp"){
						alert(risultato);
					}
				}
			}
			
        }else{
			// In attesa della risposta del form visualizzo il msg di attesa
			//updatepage(responsemsg,responsediv);
			if (strURL=="login-ajax.asp") {
				var imgload=document.getElementById('imgloading');
				imgload.style.visibility="visible";
			}else{
				
			}

		}
    }
    self.xmlHttpReq.send(getquerystring(formname));
}

function getquerystring(formname) {
    var form = document.forms[formname];
	var qstr = "";

    function GetElemValue(name, value) {
        qstr += (qstr.length > 0 ? "&" : "")
            + escape(name).replace(/\+/g, "%2B") + "="
            + escape(value ? value : "").replace(/\+/g, "%2B");
			//+ escape(value ? value : "").replace(/\n/g, "%0D");
    }
	
	var elemArray = form.elements;
    for (var i = 0; i < elemArray.length; i++) {
        var element = elemArray[i];
        var elemType = element.type.toUpperCase();
        var elemName = element.name;
        if (elemName) {
            if (elemType == "TEXT"
                    || elemType == "TEXTAREA"
                    || elemType == "PASSWORD"
					|| elemType == "BUTTON"
					|| elemType == "RESET"
					|| elemType == "SUBMIT"
					|| elemType == "FILE"
					|| elemType == "IMAGE"
                    || elemType == "HIDDEN")
                GetElemValue(elemName, element.value);
            else if (elemType == "CHECKBOX" && element.checked)
                GetElemValue(elemName, 
                    element.value ? element.value : "On");
            else if (elemType == "RADIO" && element.checked)
                GetElemValue(elemName, element.value);
            else if (elemType.indexOf("SELECT") != -1)
                for (var j = 0; j < element.options.length; j++) {
                    var option = element.options[j];
                    if (option.selected)
                        GetElemValue(elemName,
                            option.value ? option.value : option.text);
                }
        }
    }
    return qstr;
}
function updatepage(str,responsediv){
    document.getElementById(responsediv).innerHTML = str;
}
la funzione principale è xmlhttppost che prende in ingresso il nome della pagina da richiamare (strURL).

come potete vedere la uso anche per eseguire il login degli utenti
(if (strURL=="login-ajax.asp") {)
e li funziona benissimo.

Non funziona nel caso dell'upload
( if (strURL=="Upload_Video.asp"){ )

in pratica l'upload non parte neppure, come se la pagina asp non ricevesse dal form il file da uploadare.

Eppure il caso di input type=file è considerato dalla funzione
codice:
if (elemType == "TEXT"
                    || elemType == "TEXTAREA"
                    || elemType == "PASSWORD"
					|| elemType == "BUTTON"
					|| elemType == "RESET"
					|| elemType == "SUBMIT"
					|| elemType == "FILE"
					|| elemType == "IMAGE"
                    || elemType == "HIDDEN")
bisogna forse aggiungere qualche header tipo
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
per dire multipart form-data (che è cmq contenuto nel tag form) ?

Grazie
Luca