Per una webapp con un backend RESTful sto postando qualche json al server usando jquery's $post. Ora, con mia sorpresa, il json è inserito in una chiave parametro per i dati del modulo della richiesta, invece che nel corpo della richiesta. Posso pensare ad alcuni other ways to do it, ma la domanda è perché non funziona come mi aspetto.Perché jquery post json come nome parametro anziché come corpo della richiesta?
Sul server che uso scalatra e stampare alcuni richiesta informazioni:
println("Request received:")
println(fromInputStream(request.getInputStream).getLines().mkString)
println("--------------")
println(request.getParameterMap.toString)
println("==============")
Ora un semplice ricciolo che fa quello che penso sia giusto:
curl -X POST http://localhost:8080/x -H "Content-Type: application/json" -d '{"a":"b"}'
produce:
Request received:
{"a":"b"}
-------------
{}
==============
E il bit di html + js per illustrare il problema:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<body>
<button type="button" onclick="doPost()">
POST
</button>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function doPost() {
$.post("http://localhost:8080/x",
JSON.stringify({"a":"b"}),
function(data) {});
}
</script>
</body>
</html>
produce:
Request received:
--------------
{{"a":"b"}=[Ljava.lang.String;@7a2897ac}
==============
Quindi, se io uso $ post con una stringa JSON in stringa e un callback ho tutto farcite in una sola chiave di parametro. Se questo è normale, mi piacerebbe sapere perché, e come dovrei dipanarlo in modo pulito sul server. Se non è normale, mi piacerebbe sapere cosa dovrei fare per farlo entrare nel corpo della risposta usando $ post.
UPDATE: Ora c'è una feature request for jquery to support contentType on $.post