Oops, there's no 'command' argument to jdoajax. I'd have to look a bit more to determine where command comes from. Might be easiest to just override ev_command_enter in tgsj. I'm sure there's cleaner ways of approaching this, but I've other things occupying my attention right now so am not inclined to go looking for them.
Thanks, -- Raul On Sun, Mar 23, 2014 at 3:58 PM, Raul Miller <[email protected]> wrote: > Here's jdoajax: > > function jdoajax(ids,data,sentence,async) { > if(0!=rqstate) return; // previously - alert("busy - wait for previous > request to finish"); > async= (!async)?false:async; > sentence=sentence||jevsentence; > data=data||""; > ids=ids||[]; > rq= newrq(); > if(async) rq.onreadystatechange= jdor; > rq.open("POST",jform.jlocale.value,async); // true for async call > jform.jdo.value= ('undefined'==typeof sentence)?jevsentence:sentence; > rq.send(jpostargs(ids)+"&jdata="+jencode(data)+"&jwid="+jencode( > window.name)); > if(!async)jdor(); > } > > If I open up the javascript console in my jijx window and execute > > jdoajax([],'','i.3') > > I get to see i.3 entered in the jijx window (and its result). > > If I instead do: > jdoajax([],'','i.3');jdoajax([],'','i.4');jdoajax([],'','i.5'); > > I get to see all three lines entered and their results displayed. > > That said, if I turn on async: > > jdoajax([],'','i.3',1);jdoajax([],'','i.4',1);jdoajax([],'','i.5',1); > > only the first one gets executed. > > Looking closer, in the first set of three, three http requests are posted > to the server. But when I pass the fourth "async" argument, the browser > only makes the first request. > > Meanwhile, looking at your code, I think the problem is that jhrajax does > not belong in 'paint'. jhrajax belongs at the top level > > So now the question is "what is the top level"? > > When I look at the stack in place when paint executes for fd 20, it looks > like this: > > paint > advance > fd > ev_command_enter > jev_tgsj_ > > The bottom two levels are pre-defined, in jhs. You could have fd be the > top level, but then it would not make sense to have other routines call fd. > (Because, if they did, it would violate our abstraction of considering fd > the "top level".) > > You could override ev_command_enter, and that might be ok. Here's what it > looks like: > > ev_command_enter_tgsj_ > 3 : '". s=. getv ''command''' > > That feels a bit messy though. So maybe it would be better to define > ev_command_turtle_tgsj_ (I am presuming that the command argument to > jdoajax should be 'turtle' to make this work - but I've not tested it.). > Then you'd copy the line from ev_command_enter and add your jhrajax line > there. > > Thanks, > > -- > Raul > > > On Sun, Mar 23, 2014 at 3:23 PM, Brian Schott <[email protected]>wrote: > >> I'll try to reply below. >> >> On Sun, Mar 23, 2014 at 2:31 PM, Raul Miller <[email protected]> >> wrote: >> >> > Let's slow down a bit and try to think about what you are really trying >> to >> > do here. >> > >> > First, though, I have an issue here, with the concept of "in the >> server". >> > There is certainly a perspective where "only be one jhrajax in the >> server >> > for any jdoajax() sent by the client" is valid. It's an approximation - >> but >> > a good enough approximation if we manage our expectations properly. >> > >> > >> I'll take that as a qualified "Yes" answer to my question. There are >> multiple jhrajax's in my app, but only one that replies to the "command" >> input. Others reply to color changes and viewport choices. But, what I am >> trying to zero in on, is that the server cannot just "spray" several >> jhrajax responses to the client; the client has to initiated the request >> with a exactly one jdoajax(), right? So the client is not going to ever be >> able to accept extra jhrajax's that were not expressly requested. Or, if >> that is wrong, then I would like to be told about how it is done, because >> that may be the only solution to my problem. >> >> >> > Meanwhile when I look at your definition of paint in tgsjhs.ijs I see >> this >> > line: >> > drawpathlist =. {:DrawPathList >> > >> > In other words paint is currently implemented to only paint a part of >> the >> > picture. Why? >> > >> > No, paint produces turtle images (avatars?) as well as paths in the big >> for. loop. It is actually creating 3D points defining triangle corners and >> face normals. >> >> >> > On the other hand, when I look at tgsjhsutil.h I see you are using >> 'paint' >> > in a variety of places. >> > >> > That is the very issue for my problem: paint is ubiquitous and yet >> somehow >> all of those paints' (plural and possessive) results must be collected >> into >> one package, in their order of creation, to be sent back to the client. >> >> >> > I think if you just arranged to draw all of DrawPathList you'd get the >> > visual effect that I think you are looking for. Usually, that is - you >> are >> > counting on the browser to queue its requests in the order they were >> > generated, and that might glitch in some browsers. Still, it should >> work as >> > a first approximation, and I think that that would be a worthwhile >> > exercise. >> > >> >> I think this point might need some revision, now that you know the paints >> produce avatars, too. >> >> >> > Meanwhile, to achieve what I think you are trying to achieve (which is a >> > step-by-step style), ... actually I can think of a lot of ways to >> > accomplish that. One fun way involves using jQuery's deferred objects. >> This >> > allows you to lay out your javascript code so that the >> sequence-over-time >> > is laid out physically using a structure rather like if/then/else >> > statements (but it's really more like working with J gerunds, using the >> > "gerund-like-objects" to allow code to pick up and continue after >> receiving >> > a response from the server). >> > >> > Maybe this is exactly what I need. >> >> I found this example. http://jsfiddle.net/ehynds/Mrqf8/ >> I opened my console, I think. So far this is what I see in the console. >> >> [Log] I fire once BOTH ajax requests have completed! (show, line 33) >> [Error] Failed to load resource: the server responded with a status of 500 >> (Internal Server Error) (random.js, line 0) >> >> I don't get it. But the name "deferred objects" sounds good for my needs. >> Is it a way to overcome my expectation of the need for a 1-1 relationship >> between jhrajax's and jdoajax()'s ? I have no experience with Jsquery. >> >> >> >> >> >> > Maybe some of this helps? >> > >> > >> Absolutely, it helps. Do you still think deferred objects is the way to >> go, >> and there is no hope for accomplishing my goal using J features? >> >> Thanks, very much, >> >> >> > Thanks, >> > >> > -- >> > Raul >> > >> > >> -- >> (B=) >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
