gpt4 book ai didi

php - AJAX,GET ok,POST 不行

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:24 26 4
gpt4 key购买 nike

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'

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

{method: "GET", get: "here I am", post: null}

这是你所期望的。

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

{method: "POST", get: null, post: null}

服务器理解 POST 请求但不传递任何值。

我尝试了一些不同的方法来包含目标 url,结果相同

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

它们都没有区别:$_POST 保持为空。

我还在服务器上记录了 get_defined_vars(),但是 $_POST 保持为空并且在转储变量的任何地方都没有“我在这里”的痕迹。

没有 .htaccess 与 url 重写等混合。

我还能做什么?

最佳答案

我的评论的长答案是:

您尝试使用以下 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/ (内容类型信息) https://forum.jquery.com/topic/ajax-with-contenttype-application-json (最后的帖子很有帮助)

关于php - AJAX,GET ok,POST 不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com