Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    upload di baol: richiesta asincrona

    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

  2. #2
    ho modificato la funzione xmlhttppost prima inviava il form del login.

    ora invia il form giusto ma il problema rimane

    codice:
    function xmlhttpPost(strURL) {
    	var formname="";
    	var responsediv="";
    	if (strURL=="login-ajax.asp"){
    		formname="loginmod"
    		responsediv="messaggio"
    	}else{
    		formname="modvideo";
    		responsediv="messaggio"
    	}
    :master:

  3. #3
    post cancellato

  4. #4
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Se ne e' parlato millemila volte... non e' possibile inviare files tramite ajax.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  5. #5
    grazie br1

    ma com'è che parlate quando io non ci sono

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.