You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2012/04/03 10:41:07 UTC

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

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_");



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/
>
>

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

Posted by Nicolas Malin <ma...@librenberry.net>.
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/