You are not logged in.
Pages: 1
Dear all
I am new first comer for mORMot. I want to ask how to post json to http interface service by Calculator by javascrpt.
The following is sample but it got { "ErrorCode":400, "ErrorText":"Bad Request" } by the following coding.
If I change data : [4,5] , then result will be return sucessfully.
How can I amend in mORMot contract/service to achieve result or any existing reference to this
Sorry for my stupid question.
Thanks a lot!
var dataString = { n1 :4, n2 :5};
$.ajax({
type : 'POST',
url: "http://localhost:888/"+SessionSign("root/Calculator.Add"), // JQuery loads
data : JSON.stringify(dataString),
dataType: 'json',
contentType : 'application/json',
success: function(data)
{
alert("url was signed OK");
}
});
Regards,
HK City
Last edited by hkcity1111 (2014-08-18 07:01:43)
Offline
Input should be a JSON array. This is the current design and implementation.
As an alternative (with the default TSQLRestRoutingREST mode), you can encode the parameters at URI level, e.g. root/Calculator.Add?n1=4&n2=5
We may change TServiceMethod.InternalExecute() to allow incoming parameters to be encoded as a JSON object, alternatively to a JSON array.
You could create a feature request ticket to implement this behavior, if you wish. See http://synopse.info/fossil/reportlist
Offline
Thanks for your prompt reply!
Offline
I guess that using an array should not be an issue.
I suppose your service call will be wrapped within a function, so it is pretty easy to write something like this:
function calculatorAdd(n1,n2, onSuccess) {
$.ajax({
type : 'POST',
url: "http://localhost:888/"+SessionSign("root/Calculator.Add"), // JQuery loads
data : JSON.stringify([n1,n2]),
dataType: 'json',
contentType : 'application/json',
success: onSuccess
});
}
In fact, this is what our SmartMobileStudio generated code wrappers do.
Note that for best performance, you may need to enable CORS and set contentType as 'text/plain' to avoid an unnecessary double request to the server from the AJAX client - see "preflight" at https://developer.mozilla.org/en-US/doc … ntrol_CORS
Our SynCrossPlatform*.pas units could be used as a reference implementation, especially in all its {$ifdef ISDWS} parts, for AJAX clients.
Offline
Thank for your advice and I use json array as input and use several json objects within array.
Previously I sometime use dot.net to create service because the coding is very short
and now I can use delphi mORMot and the coding is very short too.
Very good framework and useful to me. : )
Thanks!
Offline
BTW, which code are you using for SessionSign()?
Sounds like if the code posted by RangerX some months ago had some minor issues.
If you have a more stable version, could you please share it?
It may help others using "pure JavaScript" mORMot clients, e.g. with jQuery.
Offline
I use weak authorization by "Javascript authentication" in the forum before.
If I got the fixing in javascript, I will post here. Thanks!
Offline
We have just implemented your request.
In fact, this feature request may be used directly in our MVC model: the incoming parameters of the controllers or the view may be defined as a JSON object, and TServiceMethod.InternalExecute() will use only the needed parameters.
The mORMot server will now accept the incoming parameters to be encoded as a JSON object of named values, in addition to the default (and more efficient) JSON array format.
For instance, the following "class request" for ICalculator.Add:
POST /root/Calculator.Add
(...)
[1,2]
Could alternatively be sent as such:
POST /root/Calculator.Add
(...)
{"n1":1,"n2":2}
Of course, order of the values is not mandatory in a JSON object, since parameters will be lookup by name. As a result, the following request will be the same as the previous one:
POST /root/Calculator.Add
(...)
{"n2":2,"n1":1}
For a sicClientDriven mode service, the needed instance ID is appended to the URI:
POST /root/ComplexNumber.Add/1234
(...)
{"aReal":20,"aImaginary":30}
In some cases, naming the parameters could be useful, on the client side. But this should not be the default, since it will be slightly slower (for parsing and checking the names), and use more bandwidth at transmission.
Any missing parameter in the incoming JSON object will be replaced by its default value. For instance, the following will run IComplexNumber(0,2):
POST /root/Calculator.Add
(...)
{"n2":2}
Any unknown parameter in the incoming JSON object will just be ignored. It could be handy, if you want to transmit some generic execution context (e.g. a global "data scope" in a MVC model), and let the service use only the values it needs.
POST /root/ComplexNumber.Add/1234
(...)
{"Session":"1234","aImaginary":30,"aReal":20,"UserLogged":"Nikita"}
Of course, the extra values would consume some bandwidth for nothing, but the process cost on the server side will be negligible, since our implementation will just ignore those unexpected properties, without allocating any memory for them.
Offline
Thank you for your enhancement. It is great!
Offline
hello, AB
I reopen this old 3d because something escapes me ...
I Mormot the server with a method similar interface:
Download function (json: RAWutf8): TserviceCustomAnswer;
if I call (from Mormot client)
POST /BSWPZNOCNDTUG6DU63Z5V7LNFE/object.Download HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
Content-Type: application/json; charset=UTF-8
Accept: */*
Accept-Encoding: synlz
Authorization: Basic xxxxxx
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows; Synopse mORMot 1.18.1204 TWinHTTP)
Content-Length: 99
Host: test:888
Cookie: mORMot_session_signature=4DDC024C; mORMot_session_signature=4DDC024C
["{\"ID\":\"directory\",\"file\":\"filename\",\"seek\":0}"]
this works
but, reading this 3d
I try, from NON mormot client:
[{"ID":"directory","file":"filename","seek":0}]
but fails, also
{"ID":"directory","file":"filename","seek":0}
fails again
ps my model is sicPerSession
Offline
You define a RawUTF8 input parameter, so the method expects a JSON string.
If you want the non mORMot client to send some true JSON array, use RawJSON as parameter type instead of RawUTF8.
Offline
Tnxs
but then there are disadvantages to the client mormot?
Offline
Pages: 1