Ergebnis 1 bis 10 von 10
  1. #1
    v.it ist offline Grünschnabel
    registriert
    02-10-2013
    Beiträge
    4

    Liste mit Links asynchron durchlaufen

    Hallo Leute,
    ich habe eine Frage zu asynchonem Javascript. JS ist relativ neu für mich, mit c# und java programmiere ich regelmäßig. Meine Frage:

    Ich habe eine Liste mit 10 Links zu Blogs. Diese Liste wird von einem Javascript durchlaufen. Das Script ruft die Links nacheinander auf (per REST) und entnimmt jeweils den letzten Blogeintrag. Die Blogeinträge werden dann zusammen auf einer Seite angezeigt. Das Script möchte ich nun so ändern, das die Links nicht nacheinander aufgerufen werden, sondern möglichst zur selben Zeit. Da es sehr lange dauern kann bis endlich der 10. Link überprüft wird. Ist das mit asynchronen Javascript grundsätzlich möglich? Ist asynchrones Java überhaupt der richtige Ansatz? Ist das ein einfaches oder komplexes Problem? Wenn ihr noch Code Snippets hätte, wäre das natürlich auch super.

    Danke und Viele Grüße
    Thomas

  2. #2
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Liste mit Links asynchron durchlaufen

    Ja das ist möglich, aber wie rufst du sie denn jetzt auf?

  3. #3
    v.it ist offline Grünschnabel
    registriert
    02-10-2013
    Beiträge
    4

    AW: Liste mit Links asynchron durchlaufen

    Der Code wurde von mir nicht geschrieben, aber ich versuche es mal wiederzugeben: Im Moment gibt es eine Funktion getListe(), diese lädt mit einem REST-Request die Liste mit den Links vom Server. Dann wird die Liste durchlaufen (wie for-each in Java, in Javascript scheint das eine jQuery Funktion zu sein) und für jeden Link wird eine Funktion getEintrag() aufgerufen. Die Funktion lädt mit einem REST-Request, den jeweils letzten Blog-Eintrag. Von einem Blogeintrag werden dann alle benötigen Infos in einem Objekt gespeichert, das Objekt wird dann in eine Liste eingefügt. Die Liste wird am Ende, wenn alle alle Links überprüft wurden, nach Datum sortiert und anschließend werden die Blogeinträge angezeigt. Die Sortierung muss wohl bei asynchronen Javascript öfter aufgerufen werden, aber das ist kein Problem, denn wichtig ist, das die Seite schnell aufgebaut wird.

    Aus meiner Sicht muss die Funktion getEintrag asynchron aufgerufen werden und nicht für jeden Link nacheinander. Ist das der richtige Weg?

  4. #4
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Liste mit Links asynchron durchlaufen

    Du gibst leider zu wenig Details preis, aber wenn jQuery zum Einsatz kommt ist davon auszugehen, dass das ganze schon asynchron ist. Welche Methode wird denn zum laden aufgerufen?

  5. #5
    Avatar von Dormilich
    Dormilich ist offline Kaiser
    registriert
    15-01-2010
    Beiträge
    1.298

    AW: Liste mit Links asynchron durchlaufen

    schau dir mal async an, da gibt es für verschiedene solcher Szenarios Funktionen, die das machen.

  6. #6
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.732

    AW: Liste mit Links asynchron durchlaufen

    Zeig' uns doch einfach mal den Code...

  7. #7
    v.it ist offline Grünschnabel
    registriert
    02-10-2013
    Beiträge
    4

    AW: Liste mit Links asynchron durchlaufen

    Ok, hier der Code. Er ist nicht von mir, ich finde ihn nicht ideal. Wahrscheinlich werde ich ihn komplett neu schreiben wenn es auf async umgestellt wird. Loadblogs() lädt die Liste mit den URLS zu den Blogs und ruft dann für jeden Listeneintrag LoadNews() auf um den neuesten Blogeintrag zu laden. Glaube die Sortierung findet uach in LoadNews() statt. Dank schonmal an Dormilich für den Link!


    Code:
    function LoadBlogs()
    {
    var BlogUrl;
    $.ajax({
    type: "GET",
    url: "http://sharepoint/kndb/_vti_bin/listdata.svc/BlogAggregatorList?$orderby=Prio",
    async: false,
    dataType: "xml",
    success: function(xml)
    {
    $(xml).find('m\\:properties').each(function(){
    LoadNews($(this).find('d\\:Titel').text(), $(this).find('d\\:BlogUrl').text(), $(this).find('d\\:Farbe').text(), $(this).find('d\\:IconUrl').text(), $(this).find('d\\:MaxEintraege').text());
    });
    }
    });
    //Release();
    }
    
    function LoadNews(Titel, URL, Farbe, Icon, Anzahl)
    {
    var IseOHB = false;
    var Color = Farbe;
    var search_url = URL + "/_vti_bin/listdata.svc/Beitr%C3%A4ge?$filter=Ver%C3%B6ffentlicht+le+datetime%27"+ISODate+"%27&$top="+Anzahl+"&$orderby=ID%20desc";
    if(OneTimeLoaded == false)
    {
    OneTimeLoaded = true;
    }
    if(URL.substr(24, 5) == "markt")
    {
    search_url = URL + "/_vti_bin/listdata.svc/Beitr%C3%A4ge?$filter=Ver%C3%B6ffentlicht+le+datetime%27"+ISODate+"%27 and ScoopItId eq null&$top="+Anzahl+"&$orderby=ID%20desc";
    }
    if(URL.substr(24, 4) == "eohb")
    {
    IseOHB = true;
    search_url = URL + "/_vti_bin/listdata.svc/Beitr%C3%A4ge?$filter=("+sec+" ge Display_sec) and (Display_sec ge 0) and (("+sec+" le Display_sec_until) or (Display_sec_until le 0))&$top="+Anzahl+"&$orderby=ID%20desc";
    }
    $.ajax
    ({
    type: "GET",
    url: search_url, 
    dataType: "xml",
    async: false,
    success: function(xml)
    {
    $(xml).find('m\\:properties').each
    (
    function()
    {
    var status = $(this).find('d\\:Genehmigungsstatus').text();
    if(status==0)
    {
    var StartPic = $(this).find('d\\:StartPicture').text();
    if(StartPic.length > 0)
    {
    StartPic = StartPic.substring(0,StartPic.length-2);
    }
    if(StartPic == "")
    {
    StartPic = Icon;
    }
    var StartTeaser = $(this).find('d\\:StartTeaser').text();
    var StartTitel = $(this).find('d\\:Titel').text();
    var StartId = $(this).find('d\\:ID').text();
    if(IseOHB)
    {
    var rawDate = $(this).find('d\\:Display_from').text();
    }else
    {
    var rawDate = $(this).find('d\\:Erstellt').text();
    }
    var Year = rawDate.substr(0, 4);
    var Month = rawDate.substr(5, 2);
    var Day = rawDate.substr(8, 2);
    var Time = rawDate.substr(11, 8);
    var Hours = Time.substr(0, 2);
    var Minutes = Time.substr(3, 2);
    var Seconds = Time.substr(6, 2);
    if(IseOHB)
    {
    var StartData = 'Veröffentlicht am ';
    }else
    {
    var StartData = 'Erstellt im Blog '+Titel+ ' am ';
    }
    var headline = '<div class="news_headline">'+StartTitel+'</div>';
    var teaser = '<div class="news_text">'+StartTeaser+'</div>';
    var data = '<div class="news_data">'+StartData+Day+'.'+Month+'.'+Year+' um '+Time+'</div>';
    var picture = '<div class="news_pic_div"><img class="news_pic" src="'+StartPic+'" alt="Bild" align="left" style="cursor: pointer; border: none;"></div>';
    var htmltext ='<li class="news_item" style="background: '+Color+'; cursor: pointer;"><a href="'+URL+'/Lists/Beitraege/ViewPost.aspx?ID='+StartId+'"><div style="height: 100%;">'+picture+data+headline+teaser+'</div></a></li>';
    news = new Object();
    news.html = htmltext;
    news.date = new Date(Year, Month-1, Day, Hours, Minutes, Seconds, 0);
    if(IseOHB)
    {
    eohb_daten.push(news);
    }else
    {
    daten.push(news);
    daten.sort
    (
    function(a,b)
    {
    return b.date-a.date;
    }
    );
    }
    }
    }
    );
    }
    });
    }

  8. #8
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Liste mit Links asynchron durchlaufen

    Naja, die Funktion wäre asynchron, wenn du das nicht mittels eines Parameters unterdrücken würdest. Schmeiss einfach den Parameter async: false raus und dann ist diese Funktion asynchron

  9. #9
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.732

    AW: Liste mit Links asynchron durchlaufen

    Da nach dem Aufruf ja wahrscheinlich noch irgendwas mit dem (globalen... bäh) Array "daten" gemacht wird, musst du noch eine Callbackstruktur einbauen, die feuert, wenn dann alle Requests durchgelaufen sind.

    In diesem Callback kannst du dann auch einmalig deine Daten sortieren und darstellen.

  10. #10
    v.it ist offline Grünschnabel
    registriert
    02-10-2013
    Beiträge
    4

    AW: Liste mit Links asynchron durchlaufen

    Danke für die Infos! Alleine dass ich jetzt weiß dass es asynchron möglich ist bringt mich schon weiter, das mit dem Callback werde ich auch berücksichtigen.
    Grüße
    Thomas

Ähnliche Themen

  1. Elemente durchlaufen
    Von domestos07 im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 06-11-2012, 01:29
  2. i-Elemente mit getElementsByName durchlaufen
    Von Mufasa im Forum JavaScript
    Antworten: 14
    Letzter Beitrag: 26-10-2009, 16:48
  3. AJAX = asynchron? Ja, das ist aber jetzt blöd
    Von petz_e im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 19-05-2008, 14:05
  4. Array Durchlaufen?
    Von KingKoQ im Forum JavaScript
    Antworten: 0
    Letzter Beitrag: 25-12-2006, 23:09
  5. Bild soll durchlaufen
    Von DerProblema im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 03-03-2006, 15:47

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •