Atul,

These interesting comments should be better in the Jira

Thanks

Jacques

From: "Atul Vani" <atul.v...@hotwaxmedia.com>
Ok, hadn't checked the code yet, did it now, my bad :)

What I oberved is that when I enter promo code, it fires an ajax request and don't display me the error message when I entered the wrong code, need to fix that. Well, the interesting part is, it then fires another ajax request to check if the cart is empty, how possibly can a cart get empty by applying a promo code :-/ And then it fires another one to update the cart with the discounted price. Why don't we return the updated cart along with the error message, if any, and replace the existing html with the new one, so that user is displayed with the error message and the updated cart both, will also save us two extra ajax requests. Another thing I noticed is that lot's of elements are being identified using their ids, not so good.

----- Original Message -----
From: "Atul Vani" <atul.v...@hotwaxmedia.com>
To: user@ofbiz.apache.org
Sent: Sunday, August 28, 2011 10:47:07 PM
Subject: Re: Issue with ajax and json response

Jonatan,

IMO, the event you invoked in your request mapping should be fixed to return error response, when they get errors. It will cause the error response to be rendered instead of the success. Then you can use type="request" value="json" for the error response. The responseText recieved by the ajax will be a JSON String. You can then pass this JSON string to the getServerError() function to extract and return error message(s). I don't know if this information will be useful to you or not, as I haven't seen the code, but this is pretty much all one needs to check :)


----- Original Message -----
From: "Jonatan Soto" <seniledemen...@gmail.com>
To: user@ofbiz.apache.org
Sent: Saturday, August 27, 2011 3:51:58 PM
Subject: Re: Issue with ajax and json response

Hi Atul,

I've didn't got server error messages using what you said. Probably is
something wrong in my code, but what I have noticed is that no matters what
kind of response I set, the 'success' callback method is called.
Anyway, how is handled the server response in this case? I mean, where can I
find the code where the getServerError() JS function is called once we
return the error response?

Many thanks Atul.

On Fri, Aug 26, 2011 at 7:32 PM, Atul Vani <atul.v...@hotwaxmedia.com>wrote:

Jonatan,

I think if you use
<response name="error" type="request" value="json"/>
(it is used in several places in ecommerce and other components'
controller.xml)

and then use the getServerError() function
(used in specialpurpose/ecommerce/webapp/ecommerce/images/profile.js)
to parse the JSON response,
then you should be able to retrieve the error message to display it to the
user.

I'm not sure if it will be helpful, I didn't got the problem completely
either ;-)


----- Original Message -----
From: "Jonatan Soto" <seniledemen...@gmail.com>
To: user@ofbiz.apache.org
Sent: Sunday, July 17, 2011 5:56:10 PM
Subject: Re: Issue with ajax and json response

Done. Patch provided, not fully tested.
https://issues.apache.org/jira/browse/OFBIZ-4342

<https://issues.apache.org/jira/browse/OFBIZ-4342>Regards,


On Sun, Jul 17, 2011 at 1:34 PM, Scott Gray <scott.g...@hotwaxmedia.com
>wrote:

> Yeah, checking for the _ERROR_MESSAGE* keys is the right way to go, would
> be great if you could create a jira issue so this doesn't get lost.
>
> Regards
> Scott
>
> HotWax Media
> http://www.hotwaxmedia.com
>
> On 17/07/2011, at 7:56 AM, Jonatan Soto wrote:
>
> > Well, I did a little read on the jquery ajax documentation (
> > http://api.jquery.com/jQuery.ajax/)  and some of my assertions were
> wrong.
> > It is definitively not related to
> > the CommonEvents#jsonResponseFromRequestAttributes. I felt stupid when
I
> > realized that the result the controller returns has nothing to do with
> the
> > ajax callbacks :)
> >
> > According to this doc the error callback is:
> > "A function to be called if the request fails...."
> >
> > In the case I'm exposing, obviously the request is not failing so the
> error
> > I'm getting should be handled in the success callback. Please, tell me
if
> > there is another way to do it.
> > I found a js function in the CheckoutProcess.js called
> getServerError(...)
> > which is never invoked. I think it should be included in the success
> > callback like the following code:
> >
> > (chekoutProcess.js)
> >
> > // Check server side error
> > function getServerError(data) {
> >    var serverErrorHash = [];
> >    var serverError = "";
> >    if (data._ERROR_MESSAGE_LIST_ != undefined) {
> >        serverErrorHash = data._ERROR_MESSAGE_LIST_;
> >        jQuery.each(serverErrorHash, function(i, error) {
> >            serverError += error.message + '<br/>';
> >        });
> >    }
> >    if (data._ERROR_MESSAGE_ != undefined) {
> >        serverError = data._ERROR_MESSAGE_;
> >    }
> >    return serverError;
> > }
> >
> > function createUpdateCustomerAndShippingAddress() {
> >    var result = false;
> >    jQuery.ajax({
> >        url: 'createUpdateShippingAddress',
> >        type: 'POST',
> >        dataType: 'json',
> >        async: false,
> >        data: jQuery('#shippingForm').serialize(),
> >        success: function(json) {
> >     var serverError = getServerError(json);
> >     if (!serverError) {
> >            jQuery('#shippingFormServerError').fadeOut('fast');
> >            // Process Shipping data response.
> >            jQuery('#shipToPartyId').val(json.partyId);
> >            jQuery('#billToPartyId').val(json.partyId);
> >            jQuery('#shipToContactMechId').val(json.contactMechId);
> >
> > jQuery('#shipToPhoneContactMechId').val(json.phoneContactMechId);
> >            jQuery('#emailContactMechId').val(json.emailContactMechId);
> >
> > //jQuery('#completedShippingMethod').html(json.shippingDescription);
> >            updateShippingSummary();
> >            getShipOptions();
> >            result = true;
> >     } else {
> >                jQuery('#shippingFormServerError').html(serverError);
> >
 jQuery('#shippingFormServerError').css("display","block");
> >                result = false;
> >     }
> >        },
> >        error: function(error) {
> >            if (error != "") {
> >                jQuery('#shippingFormServerError').html(error);
> >            }
> >            result = false;
> >        }
> >    });
> >    return result;
> > }
> >
> > Now with this modifications I am showing the server side error messages
> > correctly.
> >
> >
> > HTH
> >
> >
> > On Sat, Jul 16, 2011 at 8:28 PM, Jonatan Soto <
seniledemen...@gmail.com
> >wrote:
> >
> >> Hi BJ,
> >>
> >> The setAnonuserLogin is an ECA triggered before. The problem is after
it
> if
> >> I'm not wrong.
> >>
> >> Look at:
> >> 2011-07-16 19:44:35,399 (http-0.0.0.0-8443-2) [
> >> ServiceDispatcher.java:599:INFO ] Sync service
> >> [traditional#JF/createUpdateCustomerAndShippingAddress] finished in
> [112]
> >> milliseconds with response [{errorMessageList={Area code is missing,
> Falta
> >> Teléfono de Contacto}, responseMessage=error}]
> >> ...
> >> 2011-07-16 19:44:35,504 (http-0.0.0.0-8443-2) [
> >> RequestHandler.java:639:INFO ] Ran Event
> >> [java:org.ofbiz.common.CommonEvents#jsonResponseFromRequestAttributes]
> from
> >> [request], result is [success]
> >>
> >> The service that is called from ajax is returning 'error' but the
> chained
> >> json request is returning 'success'. I guess this is the problem.
> >>
> >> Thanks anyway!
> >>
> >>
> >> On Sat, Jul 16, 2011 at 8:18 PM, BJ Freeman <bjf...@free-man.net>
> wrote:
> >>
> >>> [traditional#JF/setAnonUserLogin] finished in [105] milliseconds with
> >>> response [{responseMessage=success}]
> >>>
> >>> it is evaluating a good lognin. this is where to debug.
> >>>
> >>> Jonatan Soto sent the following on 7/16/2011 10:59 AM:
> >>>> Hi all,
> >>>>
> >>>> I am customizing the onePageCheckout (the anonymous part) and I
found
> >>>> something strange. I've changed the client-side validation in order
to
> >>> allow
> >>>> the customer to only introduce the phone, cell phone or both. But on
> >>>> server-side I didn't change anything in the
> PartyContactMechMapProcs.xml
> >>>> yet. So, it is throwing an error of course, but the ajax handler
does
> >>> not
> >>>> consider it as an error. It always executes the success ajax
handler!
> >>>>
> >>>> This is the stack trace:
> >>>>
> >>>> 2011-07-16 19:44:35,266 (http-0.0.0.0-8443-2) [
> >>>> ControlServlet.java:141:INFO ] [[[createUpdateShippingAddress]
Request
> >>>> Begun, encoding=[UTF-8]- total:0.0,since last(Begin):0.0]]
> >>>> 2011-07-16 19:44:35,283 (http-0.0.0.0-8443-2) [
> >>>> ConfigXMLReader.java:120:INFO ] controller loaded: 0.0030s, 281
> >>> requests,
> >>>> 96 views in jndi:/0.0.0.0/ecomm/traditional/WEB-INF/controller.xml
> >>>> 2011-07-16 19:44:35,286 (http-0.0.0.0-8443-2) [
> >>>> ServiceEcaRule.java:150:INFO ] Running Service ECA Service:
> >>>> setAnonUserLogin, triggered by rule on Service:
> >>>> createUpdateCustomerAndShippingAddress
> >>>> 2011-07-16 19:44:35,392 (http-0.0.0.0-8443-2) [
> >>>> ServiceDispatcher.java:599:INFO ] Sync service
> >>>> [traditional#JF/setAnonUserLogin] finished in [105] milliseconds
with
> >>>> response [{responseMessage=success}]
> >>>> 2011-07-16 19:44:35,396 (http-0.0.0.0-8443-2) [
> >>>> TransactionUtil.java:374:WARN ]
> >>>> ---- exception report
> >>>> ----------------------------------------------------------
> >>>> [TransactionUtil.setRollbackOnly] Calling transaction
setRollbackOnly;
> >>> this
> >>>> stack trace shows where this is happening:
> >>>> Exception: java.lang.Exception
> >>>> Message: Error in simple-method [Create/Update Customer, Shipping
> >>> Address
> >>>> and other contact details.
> >>>>
> >>>
>
[file:/home/jsoto/workspace/ofbizcustom/applications/order/script/org/ofbiz/order/order/CheckoutServices.xml#createUpdateCustomerAndShippingAddress]]:
> >>>> ; {Area code is missing, Falta Teléfono de Contacto}
> >>>> ---- stack trace
> >>>> ---------------------------------------------------------------
> >>>> java.lang.Exception: Error in simple-method [Create/Update Customer,
> >>>> Shipping Address and other contact details.
> >>>>
> >>>
>
[file:/home/jsoto/workspace/ofbizcustom/applications/order/script/org/ofbiz/order/order/CheckoutServices.xml#createUpdateCustomerAndShippingAddress]]:
> >>>> ; {Area code is missing, Falta Teléfono de Contacto}
> >>>>
> >>>
>
org.ofbiz.entity.transaction.TransactionUtil.setRollbackOnly(TransactionUtil.java:374)
> >>>>
> >>>
>
org.ofbiz.entity.transaction.TransactionUtil.rollback(TransactionUtil.java:316)
> >>>> org.ofbiz.minilang.SimpleMethod.exec(SimpleMethod.java:870)
> >>>>
org.ofbiz.minilang.SimpleMethod.runSimpleMethod(SimpleMethod.java:160)
> >>>>
> org.ofbiz.minilang.SimpleMethod.runSimpleService(SimpleMethod.java:142)
> >>>>
> >>>
>
org.ofbiz.minilang.SimpleServiceEngine.serviceInvoker(SimpleServiceEngine.java:78)
> >>>>
> >>>
>
org.ofbiz.minilang.SimpleServiceEngine.runSync(SimpleServiceEngine.java:53)
> >>>>
> >>>
>
org.ofbiz.service.ModelServiceReader$GenericInvokerImpl.runSync(ModelServiceReader.java:761)
> >>>>
> >>>
>
_$gen.file_58$.home.jsoto.workspace.ofbizcustom.applications.order.servicedef.services_95$checkout_46$xml_35$createUpdateCustomerAndShippingAddress.runSync(file:/home/jsoto/workspace/ofbizcustom/applications/order/servicedef/services_checkout.xml#createUpdateCustomerAndShippingAddress:24)
> >>>>
> org.ofbiz.service.ServiceDispatcher.runSync(ServiceDispatcher.java:399)
> >>>>
> org.ofbiz.service.ServiceDispatcher.runSync(ServiceDispatcher.java:226)
> >>>>
> org.ofbiz.service.GenericDispatcher.runSync(GenericDispatcher.java:165)
> >>>>
> >>>
>
org.ofbiz.webapp.event.ServiceEventHandler.invoke(ServiceEventHandler.java:336)
> >>>>
> >>>
> org.ofbiz.webapp.control.RequestHandler.runEvent(RequestHandler.java:638)
> >>>>
> >>>
>
org.ofbiz.webapp.control.RequestHandler.doRequest(RequestHandler.java:384)
> >>>>
org.ofbiz.webapp.control.ControlServlet.doGet(ControlServlet.java:224)
> >>>>
org.ofbiz.webapp.control.ControlServlet.doPost(ControlServlet.java:87)
> >>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
> >>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> >>>>
> >>>
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> >>>>
> >>>
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> >>>>
> org.ofbiz.webapp.control.ContextFilter.doFilter(ContextFilter.java:338)
> >>>>
> >>>
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> >>>>
> >>>
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> >>>>
> >>>
>
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> >>>>
> >>>
>
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> >>>>
> >>>
>
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> >>>>
> >>>
>
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> >>>>
> >>>
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> >>>>
> >>>
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:554)
> >>>>
> >>>
>
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
> >>>>
> >>>
>
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
> >>>>
> >>>
>
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
> >>>>
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
> >>>> java.lang.Thread.run(Thread.java:619)
> >>>>
> >>>
>
--------------------------------------------------------------------------------
> >>>>
> >>>> 2011-07-16 19:44:35,397 (http-0.0.0.0-8443-2) [
> >>>> ServiceDispatcher.java:543:ERROR] Error in Service
> >>>> [createUpdateCustomerAndShippingAddress]: Area code is missing,
Falta
> >>>> Teléfono de Contacto
> >>>> 2011-07-16 19:44:35,397 (http-0.0.0.0-8443-2) [
> >>>> TransactionUtil.java:338:ERROR]
> >>>> ---- exception report
> >>>> ----------------------------------------------------------
> >>>> [TransactionUtil.rollback]
> >>>> Exception: java.lang.Exception
> >>>> Message: Stack Trace
> >>>> ---- stack trace
> >>>> ---------------------------------------------------------------
> >>>> java.lang.Exception: Stack Trace
> >>>>
> >>>
>
org.ofbiz.entity.transaction.TransactionUtil.rollback(TransactionUtil.java:337)
> >>>>
> >>>
>
org.ofbiz.entity.transaction.TransactionUtil.rollback(TransactionUtil.java:314)
> >>>>
> org.ofbiz.service.ServiceDispatcher.runSync(ServiceDispatcher.java:547)
> >>>>
> org.ofbiz.service.ServiceDispatcher.runSync(ServiceDispatcher.java:226)
> >>>>
> org.ofbiz.service.GenericDispatcher.runSync(GenericDispatcher.java:165)
> >>>>
> >>>
>
org.ofbiz.webapp.event.ServiceEventHandler.invoke(ServiceEventHandler.java:336)
> >>>>
> >>>
> org.ofbiz.webapp.control.RequestHandler.runEvent(RequestHandler.java:638)
> >>>>
> >>>
>
org.ofbiz.webapp.control.RequestHandler.doRequest(RequestHandler.java:384)
> >>>>
org.ofbiz.webapp.control.ControlServlet.doGet(ControlServlet.java:224)
> >>>>
org.ofbiz.webapp.control.ControlServlet.doPost(ControlServlet.java:87)
> >>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
> >>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> >>>>
> >>>
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> >>>>
> >>>
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> >>>>
> org.ofbiz.webapp.control.ContextFilter.doFilter(ContextFilter.java:338)
> >>>>
> >>>
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> >>>>
> >>>
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> >>>>
> >>>
>
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> >>>>
> >>>
>
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> >>>>
> >>>
>
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> >>>>
> >>>
>
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> >>>>
> >>>
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> >>>>
> >>>
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:554)
> >>>>
> >>>
>
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
> >>>>
> >>>
>
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
> >>>>
> >>>
>
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
> >>>>
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
> >>>> java.lang.Thread.run(Thread.java:619)
> >>>>
> >>>
>
--------------------------------------------------------------------------------
> >>>>
> >>>> 2011-07-16 19:44:35,398 (http-0.0.0.0-8443-2) [
> >>>> TransactionUtil.java:348:INFO ] [TransactionUtil.rollback]
transaction
> >>>> rolled back
> >>>> 2011-07-16 19:44:35,399 (http-0.0.0.0-8443-2) [
> >>>> ServiceDispatcher.java:599:INFO ] Sync service
> >>>> [traditional#JF/createUpdateCustomerAndShippingAddress] finished in
> >>> [112]
> >>>> milliseconds with response [{errorMessageList={Area code is missing,
> >>> Falta
> >>>> Teléfono de Contacto}, responseMessage=error}]
> >>>> 2011-07-16 19:44:35,399 (http-0.0.0.0-8443-2) [
> >>>> RequestHandler.java:639:INFO ] Ran Event
> >>>> [service:#createUpdateCustomerAndShippingAddress] from [request],
> result
> >>> is
> >>>> [error]
> >>>> 2011-07-16 19:44:35,495 (http-0.0.0.0-8443-2) [
> >>>> RequestHandler.java:425:ERROR] Request createUpdateShippingAddress
> >>> caused an
> >>>> error with the following message: {Area code is missing, Falta
> Teléfono
> >>> de
> >>>> Contacto}
> >>>> 2011-07-16 19:44:35,496 (http-0.0.0.0-8443-2) [
> >>>> RequestHandler.java:524:INFO ] [RequestHandler.doRequest]: Response
is
> a
> >>>> chained request. sessionId=4D2FA44B2DA6BCB7E2D9BE245F808E22.jvm1
> >>>> 2011-07-16 19:44:35,496 (http-0.0.0.0-8443-2) [
> >>>> RequestHandler.java:167:INFO ] [RequestHandler]: Chain in place:
> >>>> requestUri=json overrideViewUri=null
> >>>> sessionId=4D2FA44B2DA6BCB7E2D9BE245F808E22.jvm1
> >>>> 2011-07-16 19:44:35,504 (http-0.0.0.0-8443-2) [
> >>>> RequestHandler.java:639:INFO ] Ran Event
> >>>>
[java:org.ofbiz.common.CommonEvents#jsonResponseFromRequestAttributes]
> >>> from
> >>>> [request], result is [success]
> >>>> 2011-07-16 19:44:35,556 (http-0.0.0.0-8443-2) [
> >>>> ServerHitBin.java:627:INFO ] Visit delegatorName=default#JF,
> >>> ServerHitBin
> >>>> delegatorName=default#JF
> >>>> 2011-07-16 19:44:35,604 (http-0.0.0.0-8443-2) [
> >>>> SequenceUtil.java:337:INFO ] Got bank of sequenced IDs for
> >>> [ServerHitBin];
> >>>> curSeqId=53390, maxSeqId=53400, bankSize=10
> >>>> 2011-07-16 19:44:35,653 (http-0.0.0.0-8443-2) [
> >>>> ControlServlet.java:324:INFO ] [[[createUpdateShippingAddress]
Request
> >>> Done-
> >>>> total:0.386,since last([createUpdateShip...):0.386]]
> >>>>
> >>>>
> >>>>
> >>>
>
-----------------------------------------------------------------------------------------------
> >>>>
> >>>> After a bit of investigation I found this:
> >>>>
> >>>> The event 'createUpdateCustomerAndShippingAddress' is returning an
> error
> >>> as
> >>>> a result but since the request is chained (with a json request) the
> >>>> controller takes the response from the event
> >>>>
'java:org.ofbiz.common.CommonEvents#jsonResponseFromRequestAttributes'
> >>> which
> >>>> is always 'success'. So that's why I figure out the ajax error
handler
> >>> is
> >>>> never invoked.
> >>>>
> >>>> What do you think?
> >>>>
> >>>> For further details, I am using a 3 months old trunk version with
> MySql.
> >>>> I've checked out the latest version
> >>>> of CommonEvents#jsonResponseFromRequestAttributes in the SVN, still
> the
> >>> same
> >>>> code as I have.
> >>>>
> >>>> Thanks in advance.
> >>>>
> >>>
> >>
> >>
> >>
> >> --
> >> -----
> >>
> >> Jonatan Soto
> >>
> >
> >
> >
> > --
> > -----
> >
> > Jonatan Soto
>
>


--
-----

Jonatan Soto




--
-----

Jonatan Soto



Reply via email to