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 <[email protected]>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" <[email protected]>
> To: [email protected]
> 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 <[email protected]
> >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 <
> [email protected]
> > >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 <[email protected]>
> > 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