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:
la funzione principale è xmlhttppost che prende in ingresso il nome della pagina da richiamare (strURL).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; }
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
bisogna forse aggiungere qualche header tipocodice:if (elemType == "TEXT" || elemType == "TEXTAREA" || elemType == "PASSWORD" || elemType == "BUTTON" || elemType == "RESET" || elemType == "SUBMIT" || elemType == "FILE" || elemType == "IMAGE" || elemType == "HIDDEN")
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
per dire multipart form-data (che è cmq contenuto nel tag form) ?
Grazie
Luca

Rispondi quotando
