Note that there are some explanatory texts on larger screens.

plurals
  1. POUsing Protovis with Dynamically Loaded Data via JQuery
    primarykey
    data
    text
    <p>I am dynamically loading some social network data into a web page that I want to visualise using protovis.(Actually, the data is loaded in in a two pass process - first a list of user names is grabbed from Twitter, then a list of social connections is grabbed from the Google Social API.) The protovis code seems to run inside an event loop, which means the data loading code needs to be outside this loop.</p> <p>How do I load the data into the page and parse it, before "switching on" the protovis event loop? At the moment, I think there's a race condition whereby protovis tries to visualise network data that hasn't been loaded and parsed yet?</p> <pre><code>&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt; &lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="../protovis-3.2/protovis-r3.2.js"&gt;&lt;/script&gt; &lt;script type="text/javascript"&gt; //getNet is where we get a list of Twitter usernames function getNet(){ url="http://search.twitter.com/search.json?q=jisc11&amp;callback=?" $.getJSON(url,function(json){ users=[] uniqusers={} for (var u in json['results']) { uniqusers[json['results'][u]['from_user']]=1 } for (var uu in uniqusers) users.push(uu) getConnections(users) }) } //getConnections is where we find the connections between the users identified by the list of Twitter usernames function getConnections(users){ //Google social API limits lookup to 50 URLs; need to page this... if (users.length&gt;50) users=users.slice(0,49) str='' for (var uic=0; uic&lt;users.length; uic++) str+='http://twitter.com/'+users[uic]+',' url='http://socialgraph.apis.google.com/lookup?q='+str+'&amp;edo=1&amp;callback=?'; $.getJSON(url,function(json){ graph={} graph['nodes']=[] userLoc={} for (var uic=0; uic&lt;users.length; uic++){ graph['nodes'].push({nodeName:users[uic]}) userLoc[users[uic]]=uic } graph['links']=[] for (u in json['nodes']) { name=u.replace('http://twitter.com/','') for (var i in json['nodes'][u]['nodes_referenced']){ si=i.replace('http://twitter.com/','') if ( si in userLoc ){ if (json['nodes'][u]['nodes_referenced'][i]['types'][0]=='contact') graph['links'].push({source:userLoc[name], target:userLoc[si]}) } } } followers={} followers={nodes:graph['nodes'],links:graph['links']} }); } $(document).ready(function() { users=['psychemedia','mweller','mhawksey','garethm','gconole','ambrouk'] //getConnections(users) getNet() }) &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="center"&gt;&lt;div id="fig"&gt; &lt;script type="text/javascript+protovis"&gt; // This code is taken directly from the protovis example var w = document.body.clientWidth, h = document.body.clientHeight, colors = pv.Colors.category19(); var vis = new pv.Panel() .width(w) .height(h) .fillStyle("white") .event("mousedown", pv.Behavior.pan()) .event("mousewheel", pv.Behavior.zoom()); var force = vis.add(pv.Layout.Force) .nodes(followers.nodes) .links(followers.links); force.link.add(pv.Line); force.node.add(pv.Dot) .size(function(d) (d.linkDegree + 4) * Math.pow(this.scale, -1.5)) .fillStyle(function(d) d.fix ? "brown" : colors(d.group)) .strokeStyle(function() this.fillStyle().darker()) .lineWidth(1) .title(function(d) d.nodeName) .event("mousedown", pv.Behavior.drag()) .event("drag", force) //comment out the next line to remove labels //.anchor("center").add(pv.Label).textAlign("center").text(function(n) n.nodeName) vis.render(); &lt;/script&gt; &lt;/div&gt;&lt;/div&gt; &lt;/body&gt;&lt;/html&gt; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload