You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Nicolas Malin <ma...@librenberry.net> on 2012/04/03 10:48:48 UTC

Re: svn commit: r1308751 - in /ofbiz/trunk/framework: images/webapp/images/selectall.js webapp/src/org/ofbiz/webapp/control/RequestHandler.java

thanks Deepak Dixit for this improvement, end user will appreciate ;)

Nicolas

Le 03/04/2012 10:41, jleroux@apache.org a écrit :
> Author: jleroux
> Date: Tue Apr  3 08:41:06 2012
> New Revision: 1308751
>
> URL: http://svn.apache.org/viewvc?rev=1308751&view=rev
> Log:
> A patch from Deepak Dixit for "Auto-completer request should be async." https://issues.apache.org/jira/browse/OFBIZ-4780
>
> Currently auto-completer uses sync call to prepare auto-completer source (result list).
> Due to this user can't perform any other operation on lookup field and user should have to wait until response came.
> In general, synchronous requests should never be used because they tend to block the execution of anything else on the page (or even the entire browser UI), which isn't good.
> Also ajax-loader image not display on google chrome browser due to sync request.
>
> Need to use async request for auto-completer.
>
> Modified:
>      ofbiz/trunk/framework/images/webapp/images/selectall.js
>      ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
>
> Modified: ofbiz/trunk/framework/images/webapp/images/selectall.js
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/selectall.js?rev=1308751&r1=1308750&r2=1308751&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/images/webapp/images/selectall.js (original)
> +++ ofbiz/trunk/framework/images/webapp/images/selectall.js Tue Apr  3 08:41:06 2012
> @@ -17,6 +17,9 @@
>    * under the License.
>    */
>
> +//Define global variable to store last auto-completer request object (jqXHR).
> +var LAST_AUTOCOMP_REF = null;
> +
>   // Check Box Select/Toggle Functions for Select/Toggle All
>
>   function toggle(e) {
> @@ -412,8 +415,15 @@ function ajaxAutoCompleter(areaCsvString
>                   jQuery.ajax({
>                       url: url,
>                       type: "post",
> -                    async: false,
>                       data: {term : request.term},
> +                    beforeSend: function (jqXHR, settings) {
> +                        //If LAST_AUTOCOMP_REF is not null means an existing ajax auto-completer request is in progress, so need to abort them to prevent inconsistent behavior of autocompleter
> +                        if (LAST_AUTOCOMP_REF != null) {
> +                            var oldRef = LAST_AUTOCOMP_REF;
> +                            oldRef.abort();
> +                        }
> +                        LAST_AUTOCOMP_REF= jqXHR;
> +                    },
>                       success: function(data) {
>                       	// reset the autocomp field
>                       	autocomp = undefined;
>
> Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1308751&r1=1308750&r2=1308751&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java (original)
> +++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Tue Apr  3 08:41:06 2012
> @@ -872,7 +872,14 @@ public class RequestHandler {
>           try {
>               resp.flushBuffer();
>           } catch (java.io.IOException e) {
> -            throw new RequestHandlerException("Error flushing response buffer", e);
> +            /*If request is an ajax request and user calls abort() method for on ajax request then skip throwing of RequestHandlerException .
> +             Specially its done for async ajax auto completer call, if we call abort() method on ajax request then its showing broken pipe exception on console,
> +             because request is aborted by client (browser).*/
> +            if (!"XMLHttpRequest".equals(req.getHeader("X-Requested-With"))) {
> +                throw new RequestHandlerException("Error flushing response buffer", e);
> +            } else {
> +                if (Debug.verboseOn()) Debug.logVerbose("Skip Request Handler Exception for ajax request.", module);
> +            }
>           }
>
>           String vname = (String) req.getAttribute("_CURRENT_VIEW_");
>
>


-- 
Nicolas MALIN
Consultant
Tél : 06.17.66.40.06
Site projet : http://www.neogia.org/
-------
Société LibrenBerry
Tél : 02.48.02.56.12
Site : http://www.librenberry.net/


Re: svn commit: r1308751 - in /ofbiz/trunk/framework: images/webapp/images/selectall.js webapp/src/org/ofbiz/webapp/control/RequestHandler.java

Posted by Rishi Solanki <ri...@gmail.com>.
+1.

--
Rishi Solanki
Manager, Enterprise Software Development
HotWax Media Pvt. Ltd.
Direct: +91-9893287847
http://www.hotwaxmedia.com


On Tue, Apr 3, 2012 at 2:18 PM, Nicolas Malin <malin.nicolas@librenberry.net
> wrote:

> thanks Deepak Dixit for this improvement, end user will appreciate ;)
>
> Nicolas
>
> Le 03/04/2012 10:41, jleroux@apache.org a écrit :
>
>  Author: jleroux
>> Date: Tue Apr  3 08:41:06 2012
>> New Revision: 1308751
>>
>> URL: http://svn.apache.org/viewvc?**rev=1308751&view=rev<http://svn.apache.org/viewvc?rev=1308751&view=rev>
>> Log:
>> A patch from Deepak Dixit for "Auto-completer request should be async."
>> https://issues.apache.org/**jira/browse/OFBIZ-4780<https://issues.apache.org/jira/browse/OFBIZ-4780>
>>
>> Currently auto-completer uses sync call to prepare auto-completer source
>> (result list).
>> Due to this user can't perform any other operation on lookup field and
>> user should have to wait until response came.
>> In general, synchronous requests should never be used because they tend
>> to block the execution of anything else on the page (or even the entire
>> browser UI), which isn't good.
>> Also ajax-loader image not display on google chrome browser due to sync
>> request.
>>
>> Need to use async request for auto-completer.
>>
>> Modified:
>>     ofbiz/trunk/framework/images/**webapp/images/selectall.js
>>     ofbiz/trunk/framework/webapp/**src/org/ofbiz/webapp/control/**
>> RequestHandler.java
>>
>> Modified: ofbiz/trunk/framework/images/**webapp/images/selectall.js
>> URL: http://svn.apache.org/viewvc/**ofbiz/trunk/framework/images/**
>> webapp/images/selectall.js?**rev=1308751&r1=1308750&r2=**
>> 1308751&view=diff<http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/selectall.js?rev=1308751&r1=1308750&r2=1308751&view=diff>
>> ==============================**==============================**
>> ==================
>> --- ofbiz/trunk/framework/images/**webapp/images/selectall.js (original)
>> +++ ofbiz/trunk/framework/images/**webapp/images/selectall.js Tue Apr  3
>> 08:41:06 2012
>> @@ -17,6 +17,9 @@
>>   * under the License.
>>   */
>>
>> +//Define global variable to store last auto-completer request object
>> (jqXHR).
>> +var LAST_AUTOCOMP_REF = null;
>> +
>>  // Check Box Select/Toggle Functions for Select/Toggle All
>>
>>  function toggle(e) {
>> @@ -412,8 +415,15 @@ function ajaxAutoCompleter(**areaCsvString
>>                  jQuery.ajax({
>>                      url: url,
>>                      type: "post",
>> -                    async: false,
>>                      data: {term : request.term},
>> +                    beforeSend: function (jqXHR, settings) {
>> +                        //If LAST_AUTOCOMP_REF is not null means an
>> existing ajax auto-completer request is in progress, so need to abort them
>> to prevent inconsistent behavior of autocompleter
>> +                        if (LAST_AUTOCOMP_REF != null) {
>> +                            var oldRef = LAST_AUTOCOMP_REF;
>> +                            oldRef.abort();
>> +                        }
>> +                        LAST_AUTOCOMP_REF= jqXHR;
>> +                    },
>>                      success: function(data) {
>>                        // reset the autocomp field
>>                        autocomp = undefined;
>>
>> Modified: ofbiz/trunk/framework/webapp/**src/org/ofbiz/webapp/control/**
>> RequestHandler.java
>> URL: http://svn.apache.org/viewvc/**ofbiz/trunk/framework/webapp/**
>> src/org/ofbiz/webapp/control/**RequestHandler.java?rev=**
>> 1308751&r1=1308750&r2=1308751&**view=diff<http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1308751&r1=1308750&r2=1308751&view=diff>
>> ==============================**==============================**
>> ==================
>> --- ofbiz/trunk/framework/webapp/**src/org/ofbiz/webapp/control/**RequestHandler.java
>> (original)
>> +++ ofbiz/trunk/framework/webapp/**src/org/ofbiz/webapp/control/**RequestHandler.java
>> Tue Apr  3 08:41:06 2012
>> @@ -872,7 +872,14 @@ public class RequestHandler {
>>          try {
>>              resp.flushBuffer();
>>          } catch (java.io.IOException e) {
>> -            throw new RequestHandlerException("Error flushing response
>> buffer", e);
>> +            /*If request is an ajax request and user calls abort()
>> method for on ajax request then skip throwing of RequestHandlerException .
>> +             Specially its done for async ajax auto completer call, if
>> we call abort() method on ajax request then its showing broken pipe
>> exception on console,
>> +             because request is aborted by client (browser).*/
>> +            if (!"XMLHttpRequest".equals(req.**
>> getHeader("X-Requested-With"))**) {
>> +                throw new RequestHandlerException("Error flushing
>> response buffer", e);
>> +            } else {
>> +                if (Debug.verboseOn()) Debug.logVerbose("Skip Request
>> Handler Exception for ajax request.", module);
>> +            }
>>          }
>>
>>          String vname = (String) req.getAttribute("_CURRENT_**VIEW_");
>>
>>
>>
>
> --
> Nicolas MALIN
> Consultant
> Tél : 06.17.66.40.06
> Site projet : http://www.neogia.org/
> -------
> Société LibrenBerry
> Tél : 02.48.02.56.12
> Site : http://www.librenberry.net/
>
>