Почему jquery отправляет json как имя параметра, а не как тело запроса?

Для веб-приложения с бэкэндом RESTful я отправляю некоторый json на сервер с помощью jquery $ сообщение . Теперь, к моему удивлению, json заполняется ключом параметра для данных формы запроса, а не телом запроса. Я могу придумать другие способы сделать это , но вопрос в том, почему это не работает так, как я ожидал.

На сервере я использую scalatra и печатаю некоторую информацию о запросе:

println("Request received:")
println(fromInputStream(request.getInputStream).getLines().mkString)
println("--------------")
println(request.getParameterMap.toString)
println("==============")

Теперь простой curl, который делает то, что я считаю правильным:

curl -X POST http://localhost:8080/x -H "Content-Type: application/json" -d '{"a":"b"}'

Производит:

Request received:
{"a":"b"}
-------------
{}
==============

И бит html + js для иллюстрации проблемы:



  
  
  


Производит:

Request received:

--------------
{{"a":"b"}=[Ljava.lang.String;@7a2897ac}
============== 

Итак, если я использую $ post со строковой строкой json и обратным вызовом, я получаю все, что заполняется одним ключом параметра. Если это нормально, я хотел бы знать, почему и как я должен разгадывать это чисто на сервере. Если это не нормально, я хотел бы знать, что мне делать, чтобы получить его в теле ответа с помощью $ post.

ОБНОВЛЕНИЕ: теперь есть запрос функции для jquery для поддержки contentType в $ .post

7
задан Community 23 May 2017 в 12:33
поделиться