php - 使用 contentType : 'application/json' not working 的 Ajax 调用

标签 php jquery ajax json content-type

我有一个 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));
}

最佳答案

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

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

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

当然,如果你想发送 application/json 你实际上应该发送 JSON,但你并没有这么做。您要么需要直接将对象序列化构建为 JSON,要么需要执行类似这样的操作 - Convert form data to JavaScript object with jQuery - 序列化表单中的对象。

老实说,在您的情况下,由于您正在处理表单数据,我不太认为存在使用 application/json 的用例。

关于php - 使用 contentType : 'application/json' not working 的 Ajax 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20295080/

相关文章:

php - 使用 PHP 记录页面点击的最佳实践?

PHP - 强制文件下载脚本 - 在 IF 语句中不起作用

javascript - 为什么这个 jQuery 脚本没有用 HTML 页面上的 GIF 声明替换视频声明

jQuery 正在删除元素

javascript - 如何在 Framework 7 中验证登录凭据

php - 使用 PHP 设置过期 header

php - Symfony 身份验证提供程序

javascript - 如何使用 javascript 或 jquery 为每个数组元素设置背景颜色和边框?

Ajax 调用成功后,Jquery 悬停效果停止工作

javascript - Ajax - ember.js 中的 "Access-Control-Allow-Origin"错误