javascript - $.each and $.getJSON methods to array of links -
after converting array of names in array of url links users online , offline , names closed accounts ["https://link_1","https://link_2",name(for closed account),"https//link_3",...]
through $.map method , the .getjson within that.
i try apply $.each method condition within again, if element starts "http" applied .getjson method work json object of element (link) , add html values of properties( e.g. html+=json.name); if element doesn't start "http" add value of element (e.g. html+=value). doesn't work; html variable takes index , value within jquery.each, not json object of nested .getjson method. lost?
channels=["https://link1","https://link2","name(for closed account)",....]; var html=""; $.each(channels,function(index,value){ // elements links if(value.substring(0,4)=="http"){ $.getjson(value,function(json){ html+=json.name; }); } // elements not links else { html+= value; } });
your json requests return asynchronously, if test value of html
right below code provided, none of json requests have returned, corresponding response data missing in html
.
instead, need use callback function of json request keep track of how many replies have received, , when have of them, html
.
here suggested code:
function buildhtml(channels, ready) { // use array, can store each response in corresponding slot var html = []; // keep count of replies still need var count = channels.length; $.each(channels,function(index, value){ // elements links if(value.substring(0,4)=="http"){ $.getjson(value,function(json){ html[index] = json.name; count--; if (count == 0) { // done, notify caller: if (ready) ready(html.join('')); } }); } // elements not links else { html[index] = value; count--; } }); if (count == 0) { // true if there no http entries: // done, notify caller: if (ready) ready(html.join('')); } } channels=["https://link1","https://link2","name(for closed account)",....]; // provide call function called when html complete: buildhtml(channels, function (html) { console.log('the returned html is: ' + html); });
Comments
Post a Comment