From: ke h. <ke...@re...> - 2006-06-19 06:47:32
|
On Jun 19, 2006, at 1:13 PM, Roberto Saccon wrote: > Yariv, thanks, that makes sense and seems to work with my dojo client. > (well, Firebug throws an error, that the JSON reponse is not well > formatted, but that only happens to my experiments, the "official" > example runs fine) > > > But my main issue is how to access the data I get form the client. > > In the line: > > counter([{ip, IP}] = _State, {call, test1, Value} = _Request, > Session) -> > > there is the variable "Value", which I can write as String to Standard > output, but how can I access its JSON representation ? by the time Value reaches this function, it has been decoded into an erlang term. So Value is an erlang term which is very similar to the json term structure. Just send something complex from the client and print out Value using io:format("value: ~p", [Value]). You will see the json structure as decoded to an erlang term. ke han > > regards > Roberto > > On 6/19/06, Yariv Sadan <ya...@gm...> wrote: >> I haven't tried this with JSON myself, but as far as I understand, if >> you want to return a JSON object from Yaws, you have to return a >> tuple >> such as >> >> {struct, [{field1, "foo"}, {field2, "bar"}]} >> >> for an array, it looks like >> >> {array, ["foo", "bar"]} >> >> You can nest arrays and structs in each other. >> >> Give it a shot, tell me what you find. >> >> Yariv >> >> On 6/18/06, Roberto Saccon <rs...@gm...> wrote: >>> I still have problems with this JSON example (and in the meantime I >>> studied some tutorials about functional languages to get used to >>> this >>> semantics). I understood how I can access the String I got form >>> the >>> client JSON request, but can I also access the JSON-encoded data >>> directly ? Or do I first have to decode it explicitly ? And how do I >>> create a JSON encoded response ? So far I just managed to create a >>> String as answer. >>> >>> regards >>> Roberto >>> >>> On 6/17/06, Yariv Sadan <ya...@gm...> wrote: >>>> Hi Roberto, >>>> >>>> (I am sending the message again so it is sent also to the >>>> mailing list) >>>> >>>> On 6/16/06, Roberto Saccon <rs...@gm...> wrote: >>>>> I just started to play with JSON (using dojo at client side) and I >>>>> have several questions about the JSON example from the >>>>> distribution >>>>> (and I must admit I do not fully understand that simple example. I >>>>> just have a week of Erlang experience and tulips, atoms and the >>>>> erlang >>>>> syntax still looks a bit strange to me) >>>> >>>> Erlang is a functional language, similar to Lisp, OCaml, and >>>> Haskell. >>>> It has very different semantics from OO (haXe, Java) and procedural >>>> languages (PHP4, C). However, it's not that bad once you get >>>> used to >>>> it, and knowing Erlang will actually make you a better >>>> programmer in >>>> other languages -- even haXe and Javascript. I think it's worth >>>> learning, but it does require some dedication. >>>> >>>>> >>>>> The javascript code in "json_sample.html" defines a server method >>>>> "test1". Now I expect also a serverside funcion called "test1" >>>>> with >>>>> the signature as SMD-defined in "json_sample.yaws", but there >>>>> is no >>>>> such function there. Why ? >>>>> >>>>> What, if I would like to have several methods "test1", "test2", >>>>> "test3" at the same serviceUrl ? >>>> >>>> I found this confusing at first too. The 2 important lines on the >>>> server side are >>>> >>>> 1) yaws_jsonrpc:handler_session(A2, {sample_mod, counter}). >>>> >>>> and >>>> >>>> 2) counter([{ip, IP}] = _State, {call, test1, Value} = _Request, >>>> Session) -> >>>> >>>> the first line tells Yaws to forward all JSON-RPC methods to the >>>> "counter" function in the "sample_mod" module. The second line >>>> says, >>>> basically, "this is the counter function that will be called >>>> when the >>>> client invokes a method called 'test1'". You would duplicate >>>> this line >>>> with a different name than 'test1' for each RPC function you >>>> want to >>>> implement. >>>> >>>> on the client side, you have >>>> >>>> var methods = [ "test1" ]; >>>> var jsonrpc = imprt("jsonrpc"); >>>> var service = new jsonrpc.ServiceProxy(serviceURL, methods); >>>> >>>> which registers the Yaws page with the JSON-RPC handler and >>>> gives it a >>>> list of methods that Yaws page can satisfy. In this case, it's only >>>> the method called "test1". >>>> >>>> >>>> >>>>> >>>>> Most of that example seems to be just for generating the >>>>> output. How >>>>> would a minimalistic example look like (with empty body), which >>>>> does >>>>> nothing than just retriving the HTTP session or create a new one. >>>> >>>> I agree that a simpler example (like "hello world") would make >>>> things >>>> easier to understand. >>>> >>>>> >>>>> And where are the sessions saved at serverside when using JSON- >>>>> RPC ? >>>>> Just in RAM ? I would like to store them in a mnesia table >>>>> (well, I >>>>> havn't used it yet, hope that it is straight forward ..) and >>>>> associate >>>>> them with a record I can look up. How can I get there ? Is >>>>> there such >>>>> an example anywhere or do I need to study the source code of the >>>>> relevant modules ? >>>> >>>> AFAIK, sessions are saved in RAM. You probably don't have to use >>>> Mnesia for sessions, unless you want to share sessions between web >>>> servers. I suggest following the Mnesia "getting started" guide >>>> in the >>>> online documentation. >>>> >>>> Yariv >>>> >>> >>> >>> -- >>> Roberto Saccon >>> >>> >>> _______________________________________________ >>> Erlyaws-list mailing list >>> Erl...@li... >>> https://lists.sourceforge.net/lists/listinfo/erlyaws-list >>> >> > > > -- > Roberto Saccon > > > _______________________________________________ > Erlyaws-list mailing list > Erl...@li... > https://lists.sourceforge.net/lists/listinfo/erlyaws-list |