Hi James.
All of OpenSocial's requests are asynchronous; this means that your
script should not stall while the viewer information is being
returned. In other words, the alert order you've provided is correct
-- your initialize function keeps going while the request is being
made. The callback function you specified (_handleData in this case)
will be executed when the viewer information is available and your
program can continue.
If you want to assign the viewer information to the 'data' property of
a Spiral instance, I would take the request out of the instance
methods altogether. Do something like this instead:
<script type="application/javascript">
var mySpiral = new Spiral();
gadgets.util.registerOnLoadHandler(getViewer);
...
function getViewer() {
var req = opensocial.newDataRequest();
req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');
req.send(assignViewer);
}
function assignViewer(data) {
mySpiral.data = data;
// Now do other stuff
}
...
</script>
Does this make sense? Let me know if I can help you further.
Cheers!
- Jason
On Feb 8, 6:40 am, James Murray <[EMAIL PROTECTED]> wrote:
> yeah I've go that, the dependent code is in _handleData()
>
> The problem is more than that. consider the following:
>
> var Spiral = Class.create({
> data:null,
> initialize: function()
> {
> var req = opensocial.newDataRequest();
> req.add(req.newFetchPersonRequest("VIEWER"),
> 'viewer');
>
> req.send(this._handleData.bindAsEventListener(this));
> alert('send is done');
> },
>
> _handleData: function(data)
> {
> this.data = data;
> alert('data received');
> },
>
> })
>
> this will alert in the following order:
> 'send is done'
> 'data received'
>
> and an even bigger problem, I don't know how to tell when the send is
> finished so that I can alert the rest of my code. Also, if the
> callback function is an optional parameter, is there a different way
> to get the data? Will send return the data so that I can make it run
> line by line?
>
> -James
>
> On Feb 7, 6:03 pm, Jason <[EMAIL PROTECTED]> wrote:
>
> > Hi James.
>
> > The opensocial.DataRequest.send() method accepts an optional parameter
> > -- a function object which should be invoked when the response is
> > received. In your case, _handleData() is executed when viewer
> > information is available. So place any dependent code in
> > _handleRequest (or a function that is called from _handleRequest) and
> > this should work.
>
> > Please let me know if this helps or if there's something I missed.
>
> > - Jason
>
> > On Feb 6, 12:23 pm, James Murray <[EMAIL PROTECTED]> wrote:
>
> > > I'm using prototype 1.6 in my project, Just so you know.
>
> > > so i have this JS class that looks like this:
>
> > > var Spiral = Class.create({
> > > data:null,
> > > initialize: function()
> > > {
> > > var req = opensocial.newDataRequest();
> > > req.add(req.newFetchPersonRequest("VIEWER"), 'viewer');
>
> > > req.send(this._handleData.bindAsEventListener(this));
> > > },
>
> > > _handleData: function(data)
> > > {
> > > this.data = data;
> > > },
>
> > > })
>
> > > then I instance it:
>
> > > var spiral = new Spiral();
>
> > > well I'm having problems with the fact that the DataRequest is
> > > asynchronous, I need to know when the DataRequest is done so i can
> > > continue to do what I plan on doing with the data.
>
> > > After the line that instances the Spiral class runs, the DataRequest
> > > is still going, if I try to operate on the data after I instance my
> > > class I will most defiantly receive an error.
>
> > > How can I either make it synchronous, or check that the DataRequest is
> > > finished?
>
> > > Any help is appreciated
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"OpenSocial API Definition" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/opensocial-api?hl=en
-~----------~----~----~----~------~----~------~--~---