繁体   English   中英

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

[英]Ajax POST method not working in PHP, but GET is working

我正在尝试使用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 . ';';

?>

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

获取: 帖子:; 要求:

如果我将js文件中的类型:“ POST”替换为类型:“ GET”,这是我在警报窗口中得到的结果(正如我期望的那样):

得到:abc; 帖子:; 要求:abc;

我看不到我在这里想念的东西。 代码中有什么问题吗,或者我需要为此进行任何特殊设置。

顺便说一下,我正在使用: jquery-2.2.4.min和php v5.6和XAMPP v3.2.2。

谢谢。

内容类型不正确,需要使用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); }
    });

contentType: "json",

您的内容类型在这里是错误的。 如果您想以尝试的方式接收它,则应该使用application/x-www-form-urlencoded

如果您仍然想使用JSON,则必须对JSON输入进行json_decode

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

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

file_get_contents('php://input');

发生这种情况是因为$_POST仅包含与以下标头一起发送的数据:

  • 应用程序/ x-WWW窗体-urlencoded
  • 多部分/格式的数据编码

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

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); }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM