Kom ihåg mig?
Home Menu

Menu


Javascript, AJAX m.m.

Ämnesverktyg Visningsalternativ
Oläst 2013-07-06, 19:18 #1
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Standard Javascript, AJAX m.m.

Hej

Jag experimenterar lite med en Spotify-app för skojs skull och skulle behöva lite Javascript-tips. Det är lite svårt att förklara dock.... Vi kan säga att det är en app som hämtar låt-texter.

När man byter låt i Spotify gör jag ett AJAX-anrop till ett API som hämtar data över vilka versioner av låten som finns. Denna data använder jag sedan för att skapa några objekt som jag kallar Track. En låt skapar alltså flera Track-objekt som motsvarar olika versioner av en låt.

Typ:
Kod:
var fetchTracks = function() {
    var throbber = Throbber.forElement(_textArea[0]);
    $.ajax({
        url: "API-URL",
        dataType: 'xml'
    }).done(function(data){
        throbber.hide();
        createTracks(data);
    }).fail(function(){
       console.log("Error");
    });
}


   var createTracks = function(data) {
      _Tracks = [];
      var results = $(data).find('results').attr('count');
      if(results > 0) {
        $(data).find('result').each(function() {
          var that = this;

          $.ajax({
            url: $(that).attr('url'),
            dataType: 'html'
          }).done(function(text) {
            var track = new Track($(that).attr('id'),
                              $(that).attr('name'),
                              $(that).attr('url'),
                              $(that).attr('version'),
                              text);
            _Tracks.push(track);
          }).fail(function(){
            console.log("Error");
          });

        });
      }
    }
Så i createTracks skapas X antal Tracks-objekt. Så, när alla Track-objekt har skapats vill jag anropa en funktion som väljer en text att visa.

- Hur gör jag detta? Alltså, hur vet jag att alla låtar har skapats? AJAX-anropen är ju asynkrona så i slutet på createTracks-funktionen är det ju inte säkert att alla låtar är klara än.

Några idéer? (Om någon förstår överhuvudtaget vad jag menar )
Linuus är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-07-06, 21:16 #2
corneliisandberg corneliisandberg är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2012
Inlägg: 33
corneliisandberg corneliisandberg är inte uppkopplad
Nykomling
 
Reg.datum: Oct 2012
Inlägg: 33
Hej Linus!
Kanske är fel svar och löser måhända inte ditt problem men du kan göra ajax anropet synkront istället om du vill. Prova om det kan funka för dig med async:false parametern.

Citat:
var fetchTracks = function() {
var throbber = Throbber.forElement(_textArea[0]);
$.ajax({
async: false,
url: "API-URL",
dataType: 'xml'
}).done(function(data){
throbber.hide();
createTracks(data);
}).fail(function(){
console.log("Error");
});
}
Ge järnet!
corneliisandberg är inte uppkopplad   Svara med citatSvara med citat
Oläst 2013-07-06, 21:22 #3
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Linuus Linuus är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2009
Inlägg: 890
Citat:
Ursprungligen postat av corneliisandberg Visa inlägg
Hej Linus!
Kanske är fel svar och löser måhända inte ditt problem men du kan göra ajax anropet synkront istället om du vill. Prova om det kan funka för dig med async:false parametern.



Ge järnet!
Hej

Jo, jag vet. Ville helst inte göra det dock

Det slutade med att jag flyttade ajax-anropet för själva texten till Track-objektet. Så när man försöker hämta den från ett objekt (track.getLyrics() typ) och den inte finns så hämtar den texten via ajax, synkront, sparar och returnerar. Då slipper jag göra en massa onödiga requests dessutom. Får vara så tillsvidare.


Dock är jag fortfarande intresserad av hur man kan göra! T.ex. om man kan använda events, promises eller dylikt.
Linuus är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 07:08.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017