【问题标题】:PHP and jQuery AJAX - $_POST is always emptyPHP 和 jQuery AJAX - $_POST 始终为空
【发布时间】:2017-03-27 09:15:38
【问题描述】:

我正在尝试使用 jQuery AJAX 函数在警报框中输出我的 $_POST 值,但是我的 PHP 控制器中的 $_POST 值始终为空,并且我总是在回应。

我使用的是 PHP 5.5 版,jQuery 2.2.3 版

(我已经尝试了多种可能的解决方案来解决这个问题,但我仍然找不到正确的方法来解决这个问题。

1.这是我的 AJAX 代码(我没有使用提交功能,我只是在没有重定向的情况下更新网页上的一些内容):

$.ajax({
                method: 'POST',
                url: '../OrganizationController.php',
                dataType: "json",
                contentType: "application/json",
                data: {'myForm':$('#myForm').serialize()},
                success: function(data){
                    alert(data);
                },
                error: function(xhr, desc, err){
                    console.log(err);
                }
            });

2. 这是我的简单 PHP 控制器:

<?php

include('../mysql_conn.php');

$value;
if ($_POST['myForm']) {
    $value= $_POST['myForm'];
    header('HTTP/1.1 200 OK');
} else {
    header('HTTP/1.1 500 Internal Server Error');
}

header('Content-Type: application/json');
echo json_encode($value);
...
?>

3.我的简单表格:

 <form id="myForm">
    <input type="text" name="name" title="Name"/>
    <input type="button" name="click">Press</input>
</form>

控制器正在工作。如果我想用我的输入或一些测试文本输出响应 - 一切正常,我会在成功警报框中看到文本。

我尝试了不同的方法,并且看到了几乎所有类似问题的答案。

我尝试删除 dataType,尝试将其更改为 text,尝试删除 contentType,将对象添加到数据中,例如人们建议的许多答案,用 {'name':John} 等简单的值对其进行了测试, 试图用一个输入和文本字段制作一个非常简单的表单。没有任何帮助。

问题:

您能否就这个问题或我的代码或其他类似代码的一些小示例提出建议,以解决我的问题?

编辑:

我们有一个非常有用的discussion,但不幸的是,这些解决方案都没有帮助。但现在我们了解到,在其他浏览器或计算中一切正常,但问题可能更严重(在配置等方面)。

【问题讨论】:

  • 你可以删除contentType: "application/json",
  • 我已经试过了,又删了,还是不行。
  • method: 'POST', ---> type :'post'
  • 谢谢,昨天也已经尝试过这个变种,在你发表评论后 - 仍然没有..
  • 你也可以发布你的表格

标签: javascript php jquery ajax forms


【解决方案1】:

在您的 PHP 文件中,您只能按名称检索输入参数。就像,在您的表单中,如果您有电子邮件或电话号码,并且您将它们发送到您的控制器文件,那么在您的控制器文件中使用他们的名称而不是表单名称来获取它。

这是执行此操作的正确代码:

$.ajax({
     method: 'POST',
     url: 'test.php',
     dataType: "json",
     data: $('#myForm').serialize(),
     success: function(data) {
         alert(data);
     },
     error: function(xhr, desc, err) {
         console.log(err);
     }
 });

在你的 PHP 文件中,获取类似的值

<?php
if ($_POST['name']) {
    $value= $_POST['name'];
} else {
    header('HTTP/1.1 500 Internal Server Error');
}

header('Content-Type: application/json');
echo json_encode($value);
?>

这里我假设电子邮件是您表单中的一个字段。

试试这个!

编辑:刚刚替换了 PHP 文件中的 POST 参数,因为我看到“名称”是表单中的字段之一。干杯!

P.S: contentType: application/json 有时不起作用。在这里你可以看到一些线程:Github Thread

【讨论】:

  • 感谢您的回答。我已经尝试了您的所有变体,但 POST 仍然是空的,并且出现 500 错误。与 Masivuye Cokile 进行了长时间的讨论,在他的浏览器中一切正常,但在我的浏览器中我有这个错误......奇怪......
  • @AlexeyShabramov 你能在 Skype 或任何其他 IM 上给我看吗?
  • 感谢您的回答,但我已经找到了解决方案……而且这是 IDE 的严重错误。当我切换到另一个 IDE 和服务器时 - 一切都开始正常工作。
  • 太棒了!很高兴听到你自己修好了。
【解决方案2】:

问题是因为您将表单编码的数据放置在 JSON 对象中。除了多余之外,所有这些都会混淆您的 PHP 代码。

要解决此问题,只需发送序列化表单并使用$_POST 正常检索发送的字段。

$.ajax({
    method: 'POST',
    url: '../OrganizationController.php',
    dataType: "json",
    data: $('#myForm').serialize(),
    success: function(data){
        alert(data);
    },
    error: function(xhr, desc, err){
        console.log(err);
    }
});
if ($_POST['input-field-name-here']) {
    // do something with the data here...

    header('HTTP/1.1 200 OK');
} else {
    header('HTTP/1.1 500 Internal Server Error');
}

【讨论】:

  • 感谢 Rory McCrossan 的回答,但我已经尝试过此变体,并在您回答后再次尝试,但仍然没有。我收到一个空的 POST 和标题错误 500。
【解决方案3】:

我终于找到了解决办法!

三天我试图解决这个问题。 我使用 PHPStorm IDE v.2016.1 和它自己的内置服务器。

所以当我切换到带有自己的 Apache 服务器的 XAMPP 时,问题就解决了。在不同的变体中一切正常,所以问题不在我的代码中。 我发现this is the real bug in PHPStorm

要解决此问题: 只需切换到另一台服务器,不要使用 PHPStorm即使我在我的 PHPStorm IDE 中更改了多个服务器 - 问题也没有解决,所以要小心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多