Ajax POST方法在PHP中不起作用,但GET正在工作

时间:2016-06-13 09:43:47

标签: php jquery json ajax post

我正在尝试使用Ajax向php发送POST请求。

如果我使用GET它工作正常,但使用POST我在php中收到的数据是空的。 我以json的形式发送数据。

这就是js代码的样子:

$.ajax(
        {
            type: 'POST',
            url: 'php/GiveItBack.php',
            contentType: "json",
            data: {
                word: 'abc'
            },
            success: function (json) {
                alert(json);
            },
            error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); }
        });

这是php / GiveItBack.php文件

<?php

$x = $_GET['word'];
echo 'Get: ' . $x;

$x = $_POST['word'];
echo '; Post: ' . $x;

$x = $_REQUEST['word'];
echo '; Request: ' . $x . ';';

?>

使用此代码,警报窗口中的消息如下所示:

  

获取:;发布:;要求:;

如果我用类型替换类型:&#39; POST&#39; :&#39; GET&#39; ,这就是我的结果进入警报窗口(正如我期待的那样):

  

获取:abc;发布:;要求:abc;

我无法看到我在这里失踪的东西。 代码中有问题,或者我需要做什么特殊设置才能使其正常工作。

顺便说一句: jquery-2.2.4.min 和php v5.6 和XAMPP v3.2.2。

谢谢。

5 个答案:

答案 0 :(得分:4)

内容类型不正确,需要使用contentType: "application/x-www-form-urlencoded"'Content-Type': 'application/json'

   $.ajax(
    {
        type: 'POST',
        url: 'php/GiveItBack.php',
        contentType: "application/x-www-form-urlencoded",
        data: {
            word: 'abc'
        },
        success: function (json) {
            alert(json);
        },
        error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); }
    });

答案 1 :(得分:1)

  

application/x-www-form-urlencoded

您的内容类型错误。如果您希望以您尝试的方式接收它,则应使用json_decode

如果你仍然希望坚持使用JSON,你将需要$json = file_get_contents('php://input'); $obj = json_decode($json, TRUE); 你的PHP输入:

my @list_of_files = glob ("/path/to/files/*"); 

答案 2 :(得分:0)

$.ajax(
    {
        method: 'POST',
        url: 'php/GiveItBack.php',
        data: {
            word: 'abc'
        },
        success: function (json) {
            alert(json);
        },
        error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); }
    });

答案 3 :(得分:0)

删除contentType: json,您应该可以使用$_POST superblogal数组。如果使用contentType: json,则包含参数的对象将转换为字符串并发送到服务器。要获得字符串,您需要使用

file_get_contents('php://input');

这是因为$_POST仅包含与以下标题一起发送的数据:

  • 应用程序/ x-WWW窗体-urlencoded
  • 的multipart / form-data的编码

当您设置contentType: json时,jQuery会将application/json标头添加到$_POST不支持的请求中,因此JSON字符串将被视为原始输入,因此您需要使用php://input流来检索它

答案 4 :(得分:0)

Ajax数据 删除contentType: json

$.ajax(
        {
            type: 'POST',
            url: 'php/GiveItBack.php',

        data: {
            word: 'abc'
        },
        success: function (json) {
            alert(json);
        },
        error: function (jqXHR, textStatus, errorThrown) { alert('ERROR: ' + errorThrown); }
    });