[ 
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

Reply via email to