[ 
https://issues.apache.org/jira/browse/TAP5-1405?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13720185#comment-13720185
 ] 

Paul Stanton commented on TAP5-1405:
------------------------------------

does it handle encoding context parameters?
                
> XHR requests should be easily callable from javascript and not rely on a zone
> -----------------------------------------------------------------------------
>
>                 Key: TAP5-1405
>                 URL: https://issues.apache.org/jira/browse/TAP5-1405
>             Project: Tapestry 5
>          Issue Type: Improvement
>          Components: tapestry-core
>    Affects Versions: 5.2
>            Reporter: Paul Stanton
>            Assignee: Howard M. Lewis Ship
>             Fix For: 5.4
>
>
> I quite often needed to initialise an XHR request-response from javascript. I 
> think it would be a very useful feature for tapestry to expose to it's users.
> The ideal solution would
> 1. not require a zone for wiring (see #TAP5-1404)
> 2. encode context parameters as per server side
> EG
> I ended up writing a function to facilitate this. It handles:
>   1. the zone wiring
>   2. context parameters (unfortunately does not properly conform to encoding 
> rules as per server side generated params)
>   3. query strings (sometimes useful)
>   4. url based session ids (for when cookies are disabled)
> note that the url is usually generated at the server side via 
> ComponentResources.createEventLink.
> function multiZoneUpdate(url, params, zoneId)
> {
> // wire up zone, use dummy if none supplied
>     if (typeof(zoneId) == "undefined")
>         zoneId = "dummyZone";
>     var zoneObject = Tapestry.findZoneManagerForZone(zoneId);
>     if (!zoneObject)
>         throw "unknown zone: " + zoneId;
> // context params must be an array
>     if (!(params instanceof Array))
>         params = [params];
> // include query string if supplied
>     var qs = "";
>     var qsInd = url.indexOf("?");
>     if (qsInd != -1)
>     {
>         qs = url.substring(qsInd);
>         url = url.substring(0, qsInd);
>     }
> // include jsessionid if exists
>     var jsId = "";
>     var jsInd = url.indexOf(";");
>     if (jsInd != -1)
>     {
>         jsId = url.substring(jsInd);
>         url = url.substring(0, jsInd);
>     }
> // build url
>     if (params != null)
>         for (var p = 0; p < params.length; p++)
>             url += "/" + params[p];
> // request
>     zoneObject.updateFromURL(url + jsId + qs);
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to