[ https://issues.apache.org/jira/browse/THRIFT-1087?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henrique Mendonca updated THRIFT-1087: -------------------------------------- Attachment: THRIFT-1087-jquery-async-qunit.patch THRIFT-1087-jquery-async-qunit.patch Add support jQuery ajax for asynchronous requests: {noformat} client.testByte(0x01, function(result) { equals(result, 0x01); }); {noformat} It uses a deferred object, so we can attach events like the normal jquery ajax calls: {noformat} .error( function(error) { alert(error); } ) .success(function(result) { alert("Success: " + result); }) .complete(function() { alert("complete"); }) {noformat} I am not sure if we really need a separated generator (js:jquery) since it only needs jQuery if the user adds a callback function to the parameter list. e.g. *client.testByte(0x01)* still returns the result synchronously without even using jQuery. What do you guys think? > Nonblocking asynchronous JS services > ------------------------------------ > > Key: THRIFT-1087 > URL: https://issues.apache.org/jira/browse/THRIFT-1087 > Project: Thrift > Issue Type: Sub-task > Components: JavaScript - Compiler, JavaScript - Library > Affects Versions: 0.6 > Reporter: Henrique Mendonca > Assignee: Henrique Mendonca > Labels: javascript, thrift > Attachments: THRIFT-1087-jquery-async-qunit.patch > > Original Estimate: 168h > Remaining Estimate: 168h > > The current js lib uses an ajax synchronous request, which is not very > typical for javascript. Since the current browsers' js are still single > threaded, they block the whole website until we get an answer from the server. > Current trunk: > {quote} > MyServiceClient.prototype.getMyObject = function (objectId) \{ > this.send_getMyObject(objectId) //send request and wait for response > return this.recv_getMyObject() //interpret response > } > {quote} > I propose something like this: (pseudo-code + extra verbose for better > understanding) > {quote} > MyServiceClient.prototype.getMyObject = function (objectId, onSuccessHandler) > \{ > if ( ! onSucessHandler) \{ > this.send_getMyObject(objectId) //send request and wait for response > return this.recv_getMyObject() //interpret response > } else \{ > Thrift.HttpRequest.post( send_getMyObject(objectId) ); //send request > asynchronously > Thrift.HttpRequest.onreadystatechange = function () \{ onSuccessHandler( > this.recv_getMyObject() ); } //call handler on success > return Thrift.HttpRequest //return request object, as user might need > to attach an onError handler > } > } > {quote} > I think it should be something similar to the jQuery post: > http://api.jquery.com/jQuery.post/ > and it will still keep the compatibility with legacy code. > Any thoughts or ideas? -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira