One of the things that got me interested in OpenLaszlo was its pretty cool databinding features, which meant i could take in data from any standard XML document (be it a web page, xmlrpc, or even SOAP) and prototype a little interface around it very quickly, as i previously mentioned in my previous posts.
However, today i decided to take it a step further. I wanted to provide an interface to edit the data i obtain from a request and send back the results to the server. I also wanted to make use of the Ruby on Rails framework’s support for REST.
Being the naive person i am, i thought it was going to be a walk in the park. In OpenLaszlo, all you need to do to grab and display your data from the server is:
- Make a dataset and point it to your data (e.g. “http://localhost:3000/projects/1.xml”)
- Make a control with “datapath” set to an appropriate location in your dataset in XPath format (e.g. “dset:/project”)
- Call “doRequest” on your dataset
The call to “doRequest” can be done like so:
dset.setQueryType('GET');
dset.doRequest();
So naturally, i thought in order to POST the data from the dataset back to the server, i could do:
dset.setQueryType('POST');
dset.doRequest();
Which of course was completely wrong. I assumed that the API would work both ways (i.e. sending the data when the querytype is ‘POST’), which of course it didn’t. The only slightly helpful thing i could do was set the query string. However, this wasn’t quite compatible with REST, so i couldn’t use it as a solution.
After searching about a bit though, i came up with another solution:
var dp = new LzDatapointer();
dp.setPointer(parent.datapath);
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.open('POST', url, true);
xmlHttpRequest.send(dp.serialize());
“Great!” i thought, “This should work!”. Sadly though, it didn’t. It seems that OpenLaszlo’s XMLHttpRequest doesn’t send any data in a POST. Great.
A short while later, i realised i should be using a ‘PUT’ request for updating my REST-ful object. The final nail hit the coffin when i got a nice error message from XHttpRequest – “method ‘PUT’ not supported, use GET or POST”. Aaaagh!!
Safe to say, OpenLaszlo’s data binding API is pretty one-sided when it comes to data. Grabbing data? fine. Sending data? welcome to hell. And not even XMLHttpRequest is of any use, unless you want to send a long long query string, or just stuff everything in the headers, both options which contradict REST.
In the future i think i’m going to take a look at Adobe’s Flex. I suspect it might handle REST requests a bit better.

Add New Comment
Viewing 6 Comments
Thanks. Your comment is awaiting approval by a moderator.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Do you already have an account? Log in and claim this comment.
Add New Comment
Trackbacks
(Trackback URL)