[Seaside] How can I provide AJAX calls to 3er party libraries?

Jupiter Jones jupiter.jones at mail.com
Wed Jan 11 22:21:41 UTC 2017


Hi Mariano,

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 :)

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.

renderContentOn: canvas
| start end |
(canvas jQuery getJson
        callback: [ :eventData |
		 start := eventData first.
		end := eventData last ]
          value: (JSStream on: 'new Array(Math.round(e.min),Math.round(e.max))'));
        text: [ :stream | 
              stream
                json:
                      GRSmallDictionary new
                        at: ’someKey' put: ’someValue';
                        yourself ]) ];
        onSuccess: ((JSStream on: 'chart.series[0].setData(data);') asFunction: #(‘data'));
        dataType: 'jsonp').

or

(html jQuery ajax
	callback: [ :eventData | self doSomething: eventData ]
	json: (JSStream on: 'new Array(Math.round(e.min),Math.round(e.max))'));

Then you can respond from somewhere in #doSomething:

doSomething: eventData
| start end jsonResponse |
start := eventData first.
end := eventData last.
jsonResponse := GRSmallDictionary new at: ‘someKey’ put: ‘someValue’; yourself.
 self requestContext
    respond: [ :response | 
      response
        doNotCache;
        contentType:
            (WAMimeType applicationJson charset: self requestContext handler charSet).
      response stream json: jsonRespnose

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:

urlForCallbacksFromJSLib
  | connectorUrl |
  connectorUrl := self renderContext actionUrl copy
    addField:
        (self renderContext callbacks
            store: (JSAjaxCallback on: [ self processCallback ]));
    yourself.
  self url: connectorUrl

…and then you can do whatever you need in the #processCallback method...

processCallback
  | start end jsonRespnose |
start := self requestContext request at: ‘start’.
end := self requestContext request at: ‘end’.
  jsonRespnose := self jsonObjectToBeReturnedToClient
  self requestContext
    respond: [ :response | 
      response
        doNotCache;
        contentType:
            (WAMimeType applicationJson charset: self requestContext handler charSet).
      response stream json: jsonRespnose ]

I hope there’s something there that will help.

Cheers,

J

> On 12 Jan 2017, at 3:15 am, Mariano Martinez Peck <marianopeck at gmail.com> wrote:
> 
> Hi guys, 
> 
> 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:
> 
> 
>   /**
>      * Load new data depending on the selected min and max
>      */
>     function afterSetExtremes(e) {
> 
>         var chart = Highcharts.charts[0];
> 
>         chart.showLoading('Loading data from server...');
>         $.getJSON('https://www.highcharts.com/samples/data/from-sql.php?start= <https://www.highcharts.com/samples/data/from-sql.php?start=>' + Math.round(e.min) +
>                 '&end=' + Math.round(e.max) + '&callback=?', function (data) {
> 
>             chart.series[0].setData(data);
>             chart.hideLoading();
>         });
>     }
> 
> 
> 
> So... how could I provide that at my server side? 
> 
> 
> 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..
> 
> Thanks in advance for any lead you can give me here.
> 
> -- 
> Mariano
> http://marianopeck.wordpress.com <http://marianopeck.wordpress.com/>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/seaside/attachments/20170112/f1702d86/attachment.html>


More information about the seaside mailing list