• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ladefehler Frames

Status
Für weitere Antworten geschlossen.

vit_o

Neues Mitglied
Guten Abend,
ich versuche mehrere Downloads auf einer Seite zu starten, ohne dass
dabei mein Script unterbrochen wird.
Ich erstelle also entsprechend viele unsichtbare Frames denen ich denn in der Eigenschaft "src" den Link auf einen Octet-Stream zuweise.
Wenn ich Frame 1 nun einen Link zuordne wird die Datei heruntergeladen, weise ich aber vor Abschluss des Downloads Frame 2 einen Link zu, so wird der download der Datei 1 abgebrochen.
Woran liegt das und wie kann ich das umgehen?
Gruß,
Vito
 
Werbung:
mal abgesehen davon, dass das sowieso "murks" ist (download über frames), wie heissen deine frames denn ?

so schwer ist das eigentlich garnicht eine frage zu code zu stellen:
link, quellcode, sonst wird nur geraten.
 
Werbung:
Du willst den ganzen Quellcode sehn?
meinetwegen, ich dachte nur, dass keiner lust hat sich sowas komplett anzutun...
Ich erkläre nochmal eben, wozu ich das überhaupt mache. Mittels AJAX baue ich eine Verbindung zu der php-datei test.php auf, die ein JSON-Array mit Links, Interpreten, Titelnamen und Album zurückgibt wenn kein parameter in der URI übergebe. Die Daten kommen von einer Radiostation(Last.fm). Die Daten werden ausgewertet und sollen mit der Benennung INTERPRET - TITEL - ALBUM.mp3 gespeichert werden. Dazu wird ein Link auf die datei test.php mit einigen Parametern (u.a. Speichername) einem Frame zugewiesen. test.php erzeugt einen Octet-Stream der MP3-Datei. Dann wird ein Timeout gesetzt der den Zweiten Titel downloaden soll wenn der erste Tiel gesteamt wurde (nach der Laufzeit des Titels), wenn alle Titel einer Anfrage gedownloaded sind soll ein neuer Request gestartet werden. Es laufen im Beispiel unten 6 dieser Anfragen gleichzeitig.
Code:
    function get(anz){
        this.downloadanz    = anz;                            //Anzahl der zeitgleichen Downloads
        this.i                = 0;                            //Nummer des Aktuellen Request
        this.nr                = 0;                            //Nummer des Aktuellen Request für widerchronologische Anfragem
        this.download        = new Array(this.downloadanz);    //Jedes Array-Element enthält ein Array mit allen titeln eines Requests
        this.img            = new Array(this.downloadanz);    //alle Link zu Standardcovern (126x126)
        this.ignor            = null;                            //Array mit allen zu ignorierenden Titeln
        this.timeouts        = new Array();                    //ID sämmtlicher Timeouts
        
        //Frames zum Donwload einhängen
        var e,ee;
        e=document.createElement("frameset");
        e.border        = 0;
        e.framespacing    = 0;
        e.cols            = 0;
        e.id            = "Frameset";
        e.style.display    = "display: none !important";
        document.getElementsByTagName('html')[0].appendChild(e);
        
        for(var u=0; u<this.downloadanz; u++){
            e                = document.createElement("frame");
            e.frameborder    = "0"
            e.id            = 'saveFrame'+u;
            ee                = document.createElement("frame");
            ee.frameborder    = "0"
            ee.id            = 'saveFrame'+u+"img";
            document.getElementById('Frameset').appendChild(e);
            document.getElementById('Frameset').appendChild(ee);
        }
        
        this.request        = function (){
            if(this.request.arguments.length<1){
                if(this.i>=this.downloadanz)return false;
                this.nr        = this.i++;
            }else{
                this.nr        = this.request.arguments[0];
                this.download[this.nr]=0;
            }
            
            if(window.XMLHttpRequest){
                http    = new XMLHttpRequest();
            }else if(window.ActiveXObject){
                http    = new ActiveXObject("Microsoft.XMLHTTP");
            }
            
            http.open('GET', 'test.php', true);
            http.onreadystatechange    = function(){
                var response, i, e;
                if(http.readyState==4){
                    try{
                        response            = eval("(" + http.responseText + ")");//http.responseText ist ein JSON-Array mit folgendem Aufbau: array['Eigenschaft'][nr]
                    }catch(e){}
                    get.download[get.nr]    = new Array();
                    get.img[get.nr]            = new Array();
                    http                    = null;
                    
                    if(!response)get.request(get.nr);//Falls kein Ergebnis zurückgegeben wurde oder dies Fehlerhaft war, wird es erneut versucht
                    
                    if(typeof(response)=='object'){
                        if(typeof(get.download[this.nr])!='object')get.download[this.nr]=new Array();
                        for(i=0; i<response['title'].length; i++){
                            if(response['title'][i]=='' || response['creator'][i]==''){
                                continue;
                            }else{
                                saveas=(response['album'][i]=='')?response['creator'][i]+' - '+response['title'][i]+'.mp3':
                                    response['creator'][i]+' - '+response['title'][i]+' - '+response['album'][i]+'.mp3';
                            }
                            //Daten in Array speichern
                            get.download[get.nr].push([response['location'][i], saveas, response['duration'][i]]);
                            get.img[get.nr].push([response['image'][i], response['creator'][i]+' - '+response['album'][i]+response['image'][i].substr(response['image'][i].lastIndexOf('.'))]);
                        }
                        get.load(get.nr);
                        get.request();
                    }
                }
                return true;
            }
            http.send(null);
            return true;
        }
        this.load            = function(requestNr){
            var title, img;
            
            if(this.download[requestNr].length==0){
                this.request(requestNr);
                return false;
            }
            
            title            = this.download[requestNr].pop();
            img                = this.img[requestNr].pop();
            
            this.timeouts.push(setTimeout('get.load('+requestNr+')', (1000*title[2])));
            document.getElementById("saveFrame"+requestNr+"img").src="test.php?mode=save&link="+img[0]+"&saveas="+img[1];
            document.getElementById("saveFrame"+requestNr).src="test.php?mode=save&link="+title[0]+"&saveas="+title[1];
        }
        this.stop            = function(){
            for(var i=0; i<this.timeouts.length; i++)
                clearTimeout(this.timeouts[i]);
            return true;
        }
        
        this.request();
    }
    var get=new get(6);
 
naja, der code ist wichtig, um eventuelle fehler finden zu können, sonst ist das ein fall für die glaskugel :?

meine js kenntnisse sind ein wenig eingerostet, aber es geht um den namen des frames. wenn immer der selbe name verwendet wird, wird ein download eben abgebrochen und ein refresh des bestehenden frames verursacht.

du könntest zum testen erst mal den eintrag:
Code:
e.style.display    = "display: none !important";

auf leer setzen, dann sollten die frames nicht mehr unsichtbar sein und du solltest sehen, ob wirklich 6 frames geöffnet werden.
den genauen fehler habe ich ad hoc nicht gefunden, aber es klingt für mich nach obigem problem, dass ein refresh des aktuellen frames passiert.

ps.
war das ein bilder download ?
 
sie haben alle einen anderen Namen und werden auch korrekt eingebunden. Wenn ich das Ganze mit firebug beobachte wird auch nur dem Frame ein Link zugewiesen dem er auch zugewiesen werden soll, sprich die Frames deren downloads abgebrochen werden, werden nicht verändert. Daran wirds also wohl nicht liegen.

und ja es werden auch u.a Album-Cover heruntergeladen.
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben