JQuery Ajax POST Symfony 4 分析器中的请求

JQuery Ajax POST request in Symfony 4 profiler

我花了一段时间才弄清楚如何通过 JQuery Ajax POST 请求在 Symfony 4 中获取数据。我将放置可能对某人有帮助的代码,但它提出了 2 个我还找不到答案的问题。这是代码:

Javascript:

function sendData() {
    $.ajax({
        url: 'response2',
        method: 'POST',
        processData: false,
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ "name": "John", "time": "2pm" }),
        dataType: "json",
        success: function (data) {
            console.log(data);
        }
    });
}

PHP(在 Symfony 控制器中)

    /**
     * @Route("/response2", name="test_response2")
     * @param Request $request
     * @return Response
     */
    public function response2 (Request $request) : Response
    {
        $data1 = $request->getContent();
        $data2 = json_decode($data1);

        return $this->json(['data1' => $data1, 'data2' => $data2, 'data3' => $data2->name]);
   
    }

结果如预期,一切正常

{data1: "{"name":"John","time":"2pm"}", data2: {name: "John", time: "2pm"}, data3: "John"}

不过,我还是有些不明白。如果我做一个非常简单的 Ajax 请求,例如像这样:

function sendData() {
    $.ajax({
        url: 'response2',
        method: 'POST',
        data: { "name": "John", "time": "2pm" },
        success: function (data) {
            console.log(data);
        }
    });
}

即使它是一个 POST 请求,我在 Symfony 分析器中注意到数据没有像我预期的那样显示在“POST 参数”部分,而是在“请求”中内容”部分作为原始数据。

我还发现 header 包含 2 个对类型 Content-Type : Content-Type: text/plain;charset=UTF-8Content-Types: application/json; charset=utf-8 的引用。我找不到有关 Content-TypeS

的任何信息

所以我的问题是:

  1. 为什么以及如何 ajax 数据在 Symfony 中被检测为原始数据而不是 POST 数据?
  2. Content-TypeS是什么意思,和Content-Type有什么不同?

提前致谢

答案在我误解的文档中...

When data is an object, jQuery generates the data string from the object's key/value pairs unless the processData option is set to false. Documentation

因此,即使请求是 POST 请求,数据也不会被 Symfony 分析器识别为常规 POST 参数,因此无法在请求中找到它以在“POST parameters”部分并将其显示在“请求内容”部分。