tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Sven Mintel
  • 1 Beitrag von campari
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
705
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    campari campari ist offline Mitglied Brokat
    Registriert seit
    Nov 2004
    Beiträge
    267
    Erhalte mit Prototype ein JSON, in dem Bildernamen mit fortlaufendem Schlüssel enthalten sind.
    Auf der Seite soll erkennbar sein, wenn alle Bilder geladen sind.
    Aber als iKey wird immer "toJSON" angezeigt.

    Zudem zeigt firebug haufenweise Fehler im Netzwerk an, und will URLs nach dem Schema laden:

    img/function%20(iterator,%20context)%20%7B%20%20%20%20var%20index%20=%200;%20%20%20%20try%20{%20%20%20%2 0%20%20%20%20this._each(function%20(value)%20{iterator.call(context,%20value,%20index++);});%20%20%2 0%20}%20catch%20(e)%20{%20%20%20%20%20%20%20%20if%20(e%20!=%20$break)%20{%20%20%20%20%20%20%20%20%20 %20%20%20throw%20e;%20%20%20%20%20%20%20%20}%20%20%20%20}%20%20%20%20return%20this;}

    Die Funktion:

    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    function handleResponse(originalRequest) {
        var oJson = eval("(" + originalRequest.responseText + ")");
        var iCount = oJson.length;
        var aImg = new Array();
        var oElement = document.getElementById("status").firstChild;
        
        for(var iKey in oJson) {
            aImg[iKey] = new Image();
            aImg[iKey].src = "img/" + oJson[iKey];
            aImg[iKey].onload = function() {
                oElement.nodeValue =  iKey + "/" + iCount;
            };
        }
    }
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    das liesse sich einfacher beantworten, wenn man das JSON sehen würde....offensichtlich ist es nicht das, was du vermutest.
     

  3. #3
    campari campari ist offline Mitglied Brokat
    Registriert seit
    Nov 2004
    Beiträge
    267
    das JSON wird aus einfachem array gebildet:
    PHP-Code:
    $n=0;
    foreach(
    $aImg as $aValue) {
        
    $aReturn[$n] = $aValue['sImgName'];
        
    $n++;
    }
    echo 
    json_encode($aReturn); 
    ajax request:
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function cacheImg(sParam) {
        var myAjax = new Ajax.Request(
            "ajax.php", {
                method: 'post',
                parameters: sParam,
                onComplete: handleResponse
            }
        );
    }


    so wird der String in firebug angezeigt:

    Code :
    1
    
    ["t53d22-3.jpg","t53d22-6.jpg","A153586284_01-3.jpg", (etc....) ,"nigc877-6.jpg"]
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von campari Beitrag anzeigen
    das JSON wird aus einfachem array gebildet
    Dann verwende auch die rechte Methode, um Arrays zu durchlaufen

    Deine Variante:
    Code :
    1
    
    for(var iKey in oJson)
    ...ist gedacht, um Objekte zu Durchlaufen.

    Diese:
    Code :
    1
    
    for(var iKey =0;iKey <oJson.length;++iKey )
    ist für Arrays.

    Der signifikante Unterschied:
    ein Array ist auch ein Objekt, man kann deine Variante also schon drauf anwenden.
    Aaaaber: als Objekt betrachtet hat ein Array nicht nur seine Elemente als Member, sondern auch seine sonstigen Eigenschaften, so bspw. length,reverse,join, push etc.

    Das, was du dort im Beispiel im Pfad hast, ist bspw. die Iterator-Funktion, um die prototypejs den Array-Prototype erweitert.
    campari bedankt sich. 

  5. #5
    campari campari ist offline Mitglied Brokat
    Registriert seit
    Nov 2004
    Beiträge
    267
    Schönen Dank!

    Finale:
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    var iKey=0;
    var oJson;
    var iCount;
     
    // handle server response
    function handleResponse(originalRequest) {
        oJson = eval("(" + originalRequest.responseText + ")");
        iCount = oJson.length;
        loadImg();
    }
     
    // load single image from array
    function loadImg() {
        if(iKey < iCount) {
            var oImg = new Image();
            oImg.src = "img/" + oJson[iKey];
            oImg.onload = nudge;
        }
    }
     
    // goto next img
    function nudge() {
        iKey = iKey + 1;
        document.getElementById("status").firstChild.nodeValue = iKey + "/" + iCount;
        loadImg();
    }
    Sven Mintel bedankt sich. 

Ähnliche Themen

  1. Prüfen ob jquery geladen ist
    Von hups1803 im Forum Javascript & Ajax
    Antworten: 8
    Letzter Beitrag: 20.12.09, 15:19
  2. Prüfen ob Funktion vorhanden / ob Flashfilm geladen
    Von Da Hacker im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 09.12.09, 00:07
  3. Prüfen ob MDI Childfenster geladen ist
    Von SeeSharpNewBee im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 05.09.05, 19:44
  4. alle bilder geladen?
    Von mediaphil im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 25.06.02, 13:06