<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Mariano,<div class=""><br class=""></div><div class="">I’ve been trying to work out callbacks recently. There seems to be a number of ways of doing this depending on your requirements. There may be typos in the following but hopefully it points you in the right direction :)</div><div class=""><br class=""></div><div class="">In the example you provided, the JSON is coming from an external server. I’m guessing that you want the JSON coming from your own backend via seaside.</div><div class=""><br class=""></div><div class="">renderContentOn: canvas</div><div class="">| start end |</div><div class=""><div class="">(canvas jQuery getJson</div><div class="">        callback: [ :eventData |</div><div class=""><span class="Apple-tab-span" style="white-space:pre">            </span> start := eventData first.</div><div class=""><span class="Apple-tab-span" style="white-space:pre">           </span>end := eventData last ]</div><div class="">          value: (JSStream on: 'new Array(Math.round(e.min),Math.round(e.max))'));</div><div class="">        text: [ :stream | </div><div class="">              stream</div><div class="">                json:</div><div class="">                      GRSmallDictionary new</div><div class="">                        at: ’someKey' put: ’someValue';</div><div class="">                        yourself ]) ];</div><div class="">        onSuccess: ((JSStream on: 'chart.series[0].setData(data);') asFunction: #(‘data'));</div><div class="">        dataType: 'jsonp').</div></div><div class=""><br class=""></div><div class="">or</div><div class=""><br class=""></div><div class=""><div class="">(html jQuery ajax</div><div class=""><span class="Apple-tab-span" style="white-space:pre">     </span>callback: [ :eventData | self doSomething: eventData ]</div><div class=""><span class="Apple-tab-span" style="white-space:pre">    </span>json: (JSStream on: 'new Array(Math.round(e.min),Math.round(e.max))'));</div></div><div class=""><br class=""></div><div class="">Then you can respond from somewhere in #doSomething:</div><div class=""><br class=""></div><div class="">doSomething: eventData</div><div class="">| start end jsonResponse |</div><div class="">start := eventData first.</div><div class="">end := eventData last.</div><div class="">jsonResponse := GRSmallDictionary new at: ‘someKey’ put: ‘someValue’; yourself.</div><div class=""><div class=""> self requestContext</div><div class="">    respond: [ :response | </div><div class="">      response</div><div class="">        doNotCache;</div><div class="">        contentType:</div><div class="">            (WAMimeType applicationJson charset: self requestContext handler charSet).</div><div class="">      response stream json: jsonRespnose</div></div><div class=""><br class=""></div><div class="">Alternatively if you need to specify a URL that the JS Library may use many times and pass or post query options, you can do something like:</div><div class=""><br class=""></div><div class=""><div class="">urlForCallbacksFromJSLib</div><div class="">  | connectorUrl |</div><div class="">  connectorUrl := self renderContext actionUrl copy</div><div class="">    addField:</div><div class="">        (self renderContext callbacks</div><div class="">            store: (JSAjaxCallback on: [ self processCallback ]));</div><div class="">    yourself.</div><div class="">  self url: connectorUrl</div></div><div class=""><br class=""></div><div class="">…and then you can do whatever you need in the #processCallback method...</div><div class=""><br class=""></div><div class=""><div class="">processCallback</div><div class="">  | start end jsonRespnose |</div><div class="">start := self requestContext request at: ‘start’.</div><div class="">end := self requestContext request at: ‘end’.</div><div class="">  jsonRespnose := self jsonObjectToBeReturnedToClient</div><div class="">  self requestContext</div><div class="">    respond: [ :response | </div><div class="">      response</div><div class="">        doNotCache;</div><div class="">        contentType:</div><div class="">            (WAMimeType applicationJson charset: self requestContext handler charSet).</div><div class="">      response stream json: jsonRespnose ]</div></div><div class=""><br class=""></div><div class="">I hope there’s something there that will help.</div><div class=""><br class=""></div><div class="">Cheers,</div><div class=""><br class=""></div><div class="">J</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 12 Jan 2017, at 3:15 am, Mariano Martinez Peck <<a href="mailto:marianopeck@gmail.com" class="">marianopeck@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi guys, <div class=""><br class=""></div><div class="">I know how to use AJAX but always everything inside Seaside. I know need a way to provide JSON responses to AJAX calls made by a 3er party lib. For example, in Highstocks [1], there is an example like this:</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class="">  /**</div><div class="">     * Load new data depending on the selected min and max</div><div class="">     */</div><div class="">    function afterSetExtremes(e) {</div><div class=""><br class=""></div><div class="">        var chart = Highcharts.charts[0];</div><div class=""><br class=""></div><div class="">        chart.showLoading('Loading data from server...');</div><div class="">      <b class="">  $.getJSON('<a href="https://www.highcharts.com/samples/data/from-sql.php?start=" class="">https://www.highcharts.com/samples/data/from-sql.php?start=</a>' + Math.round(e.min) +</b></div><div class=""><b class="">                '&end=' + Math.round(e.max) + '&callback=?', function (data) {</b></div><div class=""><br class=""></div><div class="">            chart.series[0].setData(data);</div><div class="">            chart.hideLoading();</div><div class="">      <b class="">  });</b></div><div class="">    }</div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div class=""><br class="gmail-Apple-interchange-newline">So... how could I provide that at my server side? </div></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Above JS would be code that I write in Seaside and it is passed to the client. Therefore, I THINK I am able to write that JS generating a URL with the correct _s and _k or whatever..</div><div class=""><br class=""></div><div class="">Thanks in advance for any lead you can give me here.<br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class="gmail_signature">Mariano<br class=""><a href="http://marianopeck.wordpress.com/" target="_blank" class="">http://marianopeck.wordpress.com</a><br class=""></div>
</div></div>
_______________________________________________<br class="">seaside mailing list<br class=""><a href="mailto:seaside@lists.squeakfoundation.org" class="">seaside@lists.squeakfoundation.org</a><br class="">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside<br class=""></div></blockquote></div><br class=""></div></body></html>