<div dir="ltr">Hi Jupiter,<div><br></div><div>Thank you very much for your code. That was exactly what I was looking for and it did work!  It looks like indeed you have worked with callbacks :)</div><div><br></div><div>Best regards, </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 11, 2017 at 7:21 PM, Jupiter Jones <span dir="ltr"><<a href="mailto:jupiter.jones@mail.com" target="_blank">jupiter.jones@mail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Mariano,<div><br></div><div>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><br></div><div>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><br></div><div>renderContentOn: canvas</div><div>| start end |</div><div><div>(canvas jQuery getJson</div><div>        callback: [ :eventData |</div><div><span class="m_5842003676580515747Apple-tab-span" style="white-space:pre-wrap">                </span> start := eventData first.</div><div><span class="m_5842003676580515747Apple-tab-span" style="white-space:pre-wrap">                </span>end := eventData last ]</div><div>          value: (JSStream on: 'new Array(Math.round(e.min),Math.<wbr>round(e.max))'));</div><div>        text: [ :stream | </div><div>              stream</div><div>                json:</div><div>                      GRSmallDictionary new</div><div>                        at: ’someKey' put: ’someValue';</div><div>                        yourself ]) ];</div><div>        onSuccess: ((JSStream on: 'chart.series[0].setData(data)<wbr>;') asFunction: #(‘data'));</div><div>        dataType: 'jsonp').</div></div><div><br></div><div>or</div><div><br></div><div><div>(html jQuery ajax</div><div><span class="m_5842003676580515747Apple-tab-span" style="white-space:pre-wrap">    </span>callback: [ :eventData | self doSomething: eventData ]</div><div><span class="m_5842003676580515747Apple-tab-span" style="white-space:pre-wrap">     </span>json: (JSStream on: 'new Array(Math.round(e.min),Math.<wbr>round(e.max))'));</div></div><div><br></div><div>Then you can respond from somewhere in #doSomething:</div><div><br></div><div>doSomething: eventData</div><div>| start end jsonResponse |</div><div>start := eventData first.</div><div>end := eventData last.</div><div>jsonResponse := GRSmallDictionary new at: ‘someKey’ put: ‘someValue’; yourself.</div><div><div> self requestContext</div><div>    respond: [ :response | </div><div>      response</div><div>        doNotCache;</div><div>        contentType:</div><div>            (WAMimeType applicationJson charset: self requestContext handler charSet).</div><div>      response stream json: jsonRespnose</div></div><div><br></div><div>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><br></div><div><div>urlForCallbacksFromJSLib</div><div>  | connectorUrl |</div><div>  connectorUrl := self renderContext actionUrl copy</div><div>    addField:</div><div>        (self renderContext callbacks</div><div>            store: (JSAjaxCallback on: [ self processCallback ]));</div><div>    yourself.</div><div>  self url: connectorUrl</div></div><div><br></div><div>…and then you can do whatever you need in the #processCallback method...</div><div><br></div><div><div>processCallback</div><div>  | start end jsonRespnose |</div><div>start := self requestContext request at: ‘start’.</div><div>end := self requestContext request at: ‘end’.</div><div>  jsonRespnose := self jsonObjectToBeReturnedToClient</div><div>  self requestContext</div><div>    respond: [ :response | </div><div>      response</div><div>        doNotCache;</div><div>        contentType:</div><div>            (WAMimeType applicationJson charset: self requestContext handler charSet).</div><div>      response stream json: jsonRespnose ]</div></div><div><br></div><div>I hope there’s something there that will help.</div><div><br></div><div>Cheers,</div><div><br></div><div>J</div><div><br><div><blockquote type="cite"><div><div class="h5"><div>On 12 Jan 2017, at 3:15 am, Mariano Martinez Peck <<a href="mailto:marianopeck@gmail.com" target="_blank">marianopeck@gmail.com</a>> wrote:</div><br class="m_5842003676580515747Apple-interchange-newline"></div></div><div><div><div class="h5"><div dir="ltr">Hi guys, <div><br></div><div>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><br></div><div><br></div><div><div>  /**</div><div>     * Load new data depending on the selected min and max</div><div>     */</div><div>    function afterSetExtremes(e) {</div><div><br></div><div>        var chart = Highcharts.charts[0];</div><div><br></div><div>        chart.showLoading('Loading data from server...');</div><div>      <b>  $.getJSON('<a href="https://www.highcharts.com/samples/data/from-sql.php?start=" target="_blank">https://www.<wbr>highcharts.com/samples/data/<wbr>from-sql.php?start=</a>' + Math.round(e.min) +</b></div><div><b>                '&end=' + Math.round(e.max) + '&callback=?', function (data) {</b></div><div><br></div><div>            chart.series[0].setData(data);</div><div>            chart.hideLoading();</div><div>      <b>  });</b></div><div>    }</div></div><div><br></div><div><br></div><div><div><br class="m_5842003676580515747gmail-Apple-interchange-newline">So... how could I provide that at my server side? </div></div><div><br></div><div><br></div><div>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><br></div><div>Thanks in advance for any lead you can give me here.<br clear="all"><div><br></div>-- <br><div class="m_5842003676580515747gmail_signature">Mariano<br><a href="http://marianopeck.wordpress.com/" target="_blank">http://marianopeck.wordpress.<wbr>com</a><br></div>
</div></div></div></div>
______________________________<wbr>_________________<br>seaside mailing list<br><a href="mailto:seaside@lists.squeakfoundation.org" target="_blank">seaside@lists.<wbr>squeakfoundation.org</a><br><a href="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside" target="_blank">http://lists.squeakfoundation.<wbr>org/cgi-bin/mailman/listinfo/<wbr>seaside</a><br></div></blockquote></div><br></div></div><br>______________________________<wbr>_________________<br>
seaside mailing list<br>
<a href="mailto:seaside@lists.squeakfoundation.org">seaside@lists.<wbr>squeakfoundation.org</a><br>
<a href="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside" rel="noreferrer" target="_blank">http://lists.squeakfoundation.<wbr>org/cgi-bin/mailman/listinfo/<wbr>seaside</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Mariano<br><a href="http://marianopeck.wordpress.com" target="_blank">http://marianopeck.wordpress.com</a><br></div>
</div>