AJAX,好吧,POST不行

时间:2017-11-20 13:50:29

标签: php jquery ajax debian

Ajax GET请求正常运行。但我必须使用POST,因为我希望发送更多的数据,对GET来说太多了。

环境:Apache 2,Debian 9(从头开始),jQuery 3.2.1,没什么特别的。

我将问题解决了这段代码:

客户端

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="de">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Ajaxtest</title>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
</head>
<body>
    <script language="JavaScript">
    <!--
    $.ajax({
        url: 'ajaxtest2.php',
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        type: 'POST',
        data: {testdata: 'here I am'},
        success: function (resp) {
            console.log(resp);
        },
    });
    -->
    </script>
</body>
</html>

服务器

<?php
ini_set('error_reporting', E_ERROR);
header('Content-type: application/json'); 
header('HTTP/1.1 200 OK');
print json_encode(
    array(
        'method'=>$_SERVER['REQUEST_METHOD'],
        'get'=>$_GET['testdata'],
        'post'=>$_POST['testdata'])
    );
exit();
?>

通过GET发送ajax调用时我只会更改

type: 'POST'

type: 'GET'

这在控制台上给了我这个结果:

  

{方法:“获取”,获取:“我在这里”,发布:null}

这就是你所期望的。

但是当我通过POST调用时,我得到:

  

{method:“POST”,get:null,post:null}

服务器理解POST请求但不提供任何值。

我尝试了不同的方法来包含目标网址,正如一些人所建议的那样具有相同的结果

url: 'ajaxtest2.php'
url: './ajaxtest2.php'
url: './ajaxtest2.php/'

他们都没有区别:$ _POST保持空白。

我还在服务器上记录了 get_defined_vars(),但$ _POST保持为空,并且在转储变量中的任何地方都没有'的痕迹。 。 / p>

没有.htaccess混合网址重写等。

我还能做什么?

1 个答案:

答案 0 :(得分:1)

我的评论的长期答案是有效的:

您尝试使用contentType:

将数据发送到服务器
application/json; charset=utf-8

而不是发送POST数据的默认和规范:

application/x-www-form-urlencoded; charset=UTF-8

在服务器端,它没有将contentType作为表单帖子,而是作为application/json。这意味着没有数据放入$ _POST变量供php使用。

GET是一个不同的故事,因为该数据位于URL中,而不是在正文中。

对于ajax调用,编码类型应始终为utf-8,因此这也不是问题。

您通常不希望将json数据发送到 这样的服务器 。它只适用于将数据发送到期望在接受时解析的原始json数据的应用程序。对于PHP服务器,它需要“表单数据”(否则您需要阅读php://input,请参阅下面的底部参考URL。)

希望有助于消除困惑。

更多信息: http://api.jquery.com/jquery.ajax/(contentType信息) https://forum.jquery.com/topic/ajax-with-contenttype-application-json(上一篇文章很有帮助)