[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