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-8
和 Content-Types: application/json; charset=utf-8
的引用。我找不到有关 Content-TypeS
的任何信息
所以我的问题是:
- 为什么以及如何 ajax 数据在 Symfony 中被检测为原始数据而不是 POST 数据?
- 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”部分并将其显示在“请求内容”部分。
我花了一段时间才弄清楚如何通过 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-8
和 Content-Types: application/json; charset=utf-8
的引用。我找不到有关 Content-TypeS
所以我的问题是:
- 为什么以及如何 ajax 数据在 Symfony 中被检测为原始数据而不是 POST 数据?
- 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”部分并将其显示在“请求内容”部分。