[Seaside] AJAX callback:value: via POST message

Esteban A. Maringolo emaringolo at gmail.com
Thu Jun 21 13:07:16 UTC 2018


Hi,

I'm currently doing a an AJAX call with #callback:value: where the value
is a stringified JSON I built at client side and which on completion
returns a script file. But the value payload is passed encoded in the
URI, and this has a size limit.

Is there a way to do a callback:value: using POST instead of GET?

The call is something like this:

( html jQuery id: self tableId )
  on: 'paste'
  selector: nil
  data: ( ( html jQuery ajax )
    callback: [ :json | self pasteMatrix: ( WAJsonParser parse: json ) ]
      value: ( JSStream on: 'JSON.stringify(arguments[0])' );
    onComplete: ( html jQuery ajax
      script: [ :s | self scriptValidatedReloadOn: s ] ) ) asFunction.
  call: (JSStream on: 'pasteHandler' )


And I'd like to have a POST based function that sends the JSON string in
it's `data` payload instead.

Regards,


Appendix A:

`pasteHandler` is a custom function that detects if the contents being
pasted into a text input are not a single value but instead are values
copied from an Excel file, in tab separated format, and if so overrides
the event propagation, creates a matrix (array of arrays), and calls the
function passed to the `data:` parameter in the event handler.

Because the inputs are presented as separate <input> tags within a
table, that's the only way I found to preserve the convenience of having
separate inputs, but with the behavior of a single "grid" for pasting
(and copying) data.


function pasteHandler(event){
  var clipboardData, pastedData;
  var e = event.originalEvent;
  var matrix;

  clipboardData = e.clipboardData || window.clipboardData;
  if (!clipboardData) return false;

  pastedData = clipboardData.getData("Text");
  matrix = tabMatrix(pastedData);
  if (isMatrix(matrix)) {
    // Stop data actually being pasted
    var point = pastePoint(e.target);
    var matrixHandler = event.data;
    if (matrixHandler) {
      e.stopPropagation();
      e.preventDefault();
      matrixHandler({"matrix": matrix, "point": point});
    }
  }
}


-- 
Esteban A. Maringolo


More information about the seaside mailing list