PHP和jQuery AJAX - $ _POST始终为空

时间:2017-03-27 09:15:38

标签: javascript php jquery ajax forms

我正在尝试使用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 ,尝试将其更改为文字,尝试删除 contentType ,将数据添加到对象中人们建议的许多答案,用简单的值来测试,例如 {&#39; name&#39;:John} 等, 试图用一个输入和文本字段制作一个非常简单的表单。什么都没有帮助。

问题:

您能否就此问题或我的代码或其他类似代码的一些小例子提出建议,并为我的问题提供可能的解决方案?

修改

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

3 个答案:

答案 0 :(得分:3)

在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 param,因为我看到“name”是表单中的一个字段。干杯!

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

答案 1 :(得分:1)

问题是因为您将表单编码数据放在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');
}

答案 2 :(得分:0)

我终于找到了解决方案!

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

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

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