一尘不染

contentType:'application / json'的Ajax调用不起作用

php

我有一个ajax调用,它将表单数据发送到php函数。因为我读到很多东西,所以使用contentType: 'application/json'最佳实践是我想尝试的。但不幸的是,我的脚本在使用时不返回任何内容。如果删除它,脚本将执行应做的事情。

您知道原因可能是什么以及为什么吗?谢谢!

$('#Form').submit(function(e) {
            e.preventDefault();

            var content = $(this).serialize() + "&ajax=1";

            $.ajax('app/class/controller/contactForm.php', {
              type: "POST",
              //contentType: 'application/json',
              dataType: 'json',
              data: content,
              success: function(result) {
                  console.log(result);
              }
            });
        })

和我的PHP:

if(isset($_POST['ajax']) && $_POST['ajax'] === '1') {
    echo json_encode(validateForm($_POST));
}

阅读 441

收藏
2020-05-29

共1个答案

一尘不染

使用时,contentType: 'application/json'您将无法依靠$_POST被填充。
$_POST仅针对表单编码的内容类型填充。

因此,您需要像这样从PHP原始输入读取数据:

$input = file_get_contents('php://input');
$object = json_decode($input);

当然,如果要发送application/json,则实际上应该发送JSON,而您并没有这样做。您或者需要直接将对象序列化构建为JSON,或者需要执行类似的操作-使用jQuery将表单数据转换为JavaScript对象 -以从表单序列化对象。

老实说,由于您要处理表单数据,因此我不太认为有使用的用例application/json

2020-05-29