I''m building an extension to an existing Rails app  but have hit a
problem the developers cannot seem to help me with. From a javascript-
based shadowbox, I post an addition to a RDF triplestore via a proxy
call: with the following in the Rails app (''uri'' is the
triplestore
address, ''claim'' the RDF to be added):
response = Net::HTTP.start(uri.host, uri.port) { |http|
  http.request_post(uri.path, claim, { ''Content-type'' =>
''text/
turtle'' })
}
and want to return the triplestore response to the javascript call. I
was told to use:
send_data(response.body, :type => response[''content-type''],
    :status => "#{response.code}")
which half works. But I need to return the
response[''location''] value
as it contains the uri of the added rdf. But send_data does not seem
to allow the return of the location: is there any way that I can do
this?
Thanks,
Tony.
(Apologies if this is a simple or stupid question: I''m trying to do
this complex (to me) stuff with very little Rails knowledge)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On Nov 24, 6:34 pm, Tony <TonyLi...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> I''m building an extension to an existing Rails app but have hit a > problem the developers cannot seem to help me with. From a javascript- > based shadowbox, I post an addition to a RDF triplestore via a proxy > call: with the following in the Rails app (''uri'' is the triplestore > address, ''claim'' the RDF to be added): > > response = Net::HTTP.start(uri.host, uri.port) { |http| > http.request_post(uri.path, claim, { ''Content-type'' => ''text/ > turtle'' }) > > } > > and want to return the triplestore response to the javascript call. I > was told to use: > > send_data(response.body, :type => response[''content-type''], > :status => "#{response.code}") > > which half works. But I need to return the response[''location''] value > as it contains the uri of the added rdf. But send_data does not seem > to allow the return of the location: is there any way that I can do > this? >Where were you planning on storing it ? It''s either the body or a header of some sort. For a javascript client you might set response.headers[''X-JSON''] = {:location => foo}.to_json Prototype response handlers get passed this header (after it has been parsed into a JS object) Fred> Thanks, > Tony. > > (Apologies if this is a simple or stupid question: I''m trying to do > this complex (to me) stuff with very little Rails knowledge)--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks for the reply, Fred. It isn''t for storage, just to assure the user that it has been received by the triplestore. I''m afraid I''m too much of a novice to understand what you''ve suggested. The response variable contains the return I received from the triplestore which includes the location as response[''location''] and I just want to send this response back to the javascript client. If I set the response.headers[''X-JSON''] as you''ve suggested, how does this get to the client using send_data as it seems only body, type and status can be sent. Cheers, Tony. On Nov 24, 6:42 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Where were you planning on storing it ? It''s either the body or a > header of some sort. > For a javascript client you might set > response.headers[''X-JSON''] = {:location => foo}.to_json > Prototype response handlers get passed this header (after it has been > parsed into a JS object) > > Fred >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 25 Nov 2008, at 10:57, Tony wrote:> > Thanks for the reply, Fred. It isn''t for storage, just to assure the > user that it has been received by the triplestore. > > I''m afraid I''m too much of a novice to understand what you''ve > suggested. The response variable contains the return I received from > the triplestore which includes the location as response[''location''] > and I just want to send this response back to the javascript client. > If I set the response.headers[''X-JSON''] as you''ve suggested, how does > this get to the client using send_data as it seems only body, type and > status can be sent. >It just does. send_data won''t unset headers previously set. Fred> Cheers, > Tony. > > On Nov 24, 6:42 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: >> Where were you planning on storing it ? It''s either the body or a >> header of some sort. >> For a javascript client you might set >> response.headers[''X-JSON''] = {:location => foo}.to_json >> Prototype response handlers get passed this header (after it has been >> parsed into a JS object) >> >> Fred >> > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks, Fred. Though it looks a bit more complicated. I was going to
test your suggestion and so stuck a breakpoint in proxy_controller
before the send_data:
    response = Net::HTTP.start(uri.host, uri.port) { |http|
      http.request_post(uri.path, claim, { ''Content-type''
=> ''text/
turtle'' })
    }
debugger
    send_data(response.body, :type =>
response[''content-type''],
        :status => "#{response.code} #{response.message}")
but the javascript completed before I could get to the debugger. The
js (using prototype) looks like:
	new Ajax.Request(''/proxy'',
	 {
	   method:''post'',
       parameters: { ''claimType'': claim_type,
''claimId'': claim_id,
''sacURL'':sac, ''notes'':notes,
''rating'':rating, ''tags'':tags.toString
() },
	   onSuccess: function(transport){
	   	 alert(''Added claim at: '' + transport.body);
	     Shadowbox.close();
	     return;
	   },
	   onFailure: function(transport){
	     alert(''Something went wrong...\nProbably incorrect SAC address\n
\nStatus: '' + transport.status + ''Text: '' +
transport.responseText);
		 Shadowbox.close();
	     return;
	   }
	 });
so it looks as though the post is coming back as successful before the
proxy_controller can do the send_data though the page is held up from
refreshing until proxy_controller completes.
Why would this be? I thought the post to /proxy would not know whether
the post was complete and successful or not (same thing happens if I
change onSuccess to onComplete) until the proxy_controller has
finished.
Hmm, maybe the post is asynch. I''ll do some more digging but any
suggestions meantime would be appreciated.
Cheers,
Tony.
On Nov 25, 11:12 am, Frederick Cheung
<frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:>
> It just does. send_data won''t unset headers previously set.
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
On Nov 26, 8:52 pm, Tony <TonyLi...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> Thanks, Fred. Though it looks a bit more complicated. I was going to > test your suggestion and so stuck a breakpoint in proxy_controller > before the send_data: > > response = Net::HTTP.start(uri.host, uri.port) { |http| > http.request_post(uri.path, claim, { ''Content-type'' => ''text/ > turtle'' }) > } > debugger > send_data(response.body, :type => response[''content-type''], > :status => "#{response.code} #{response.message}") > > but the javascript completed before I could get to the debugger.As in the onComplete was called ? did you start the server with the -- debugger option ? Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Yes, I did and it waits for me to type continue. Just checked Prototype docs and it seems Ajax.Request is asynch so I guess the complete/success states merely relate to making the call rather than getting anything back from the callee. Yes, setting ''asynchronous: false'' in the request does hold up the onSuccess. And it enables any error to be trapped by the onFailure. So, although it is considered bad practice, seems I have no option but to use a synchronous call to the proxy_controller otherwise the success/failure does not work. now back to the send_data issue :) T. On Nov 26, 8:58 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > As in the onComplete was called ? did you start the server with the -- > debugger option ? > > Fred--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Nov 26, 9:18 pm, Tony <TonyLi...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> Yes, I did and it waits for me to type continue. > > Just checked Prototype docs and it seems Ajax.Request is asynch so I > guess the complete/success states merely relate to making the call > rather than getting anything back from the callee. >That''s incorrect. onSuccess/onComplete are called when a response is received from the remote server (half the point of those callbacks is to do something with the response from the server) Fred> Yes, setting ''asynchronous: false'' in the request does hold up the > onSuccess. And it enables any error to be trapped by the onFailure. > > So, although it is considered bad practice, seems I have no option but > to use a synchronous call to the proxy_controller otherwise the > success/failure does not work. > > now back to the send_data issue :) > > T. > > On Nov 26, 8:58 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: > > > > > As in the onComplete was called ? did you start the server with the -- > > debugger option ? > > > Fred--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
That''s what I would have thought. Maybe it is Rails and how it handles asynch requests- wil dig some more tomorrow - got an early flight so off to bed. Cheers, Tony. On Nov 26, 9:30 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Nov 26, 9:18 pm, Tony <TonyLi...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> Yes, I did and it waits for me to type continue. > > > Just checked Prototype docs and it seems Ajax.Request is asynch so I > > guess the complete/success states merely relate to making the call > > rather than getting anything back from the callee. > > That''s incorrect. onSuccess/onComplete are called when a response is > received from the remote server (half the point of those callbacks is > to do something with the response from the server) > > Fred >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---