从 AJAX 请求中去除 POST 的 PHP 配置?

Posted

技术标签:

【中文标题】从 AJAX 请求中去除 POST 的 PHP 配置?【英文标题】:PHP configuration that strips POST from AJAX request? 【发布时间】:2014-10-04 17:09:25 【问题描述】:

我知道这似乎太复杂了,但我很困惑。

我有一个页面使用 jQuery 的 post 方法向我的 API 发送 AJAX POST 请求。它们都在同一个域/服务器上。

$.post('api/login.php', username: 'test', password: 'test').done(function (res) 
    alert(res.response);
);

API 如下所示:

<?php
exit (json_encode(array ('response' => print_r($_REQUEST, true))));

这在我的本地 WAMP 设置中按预期工作,但在 Bluehost 上,它只显示 Array (),就好像请求中没有参数一样。

如果我将$.post 更改为$.get,它接收两个参数就好了。

如果我使用 html 表单并在不使用 AJAX 的情况下发送数据,它也可以按预期工作,例如

<form method="post" action="api/login.php">
    <input type="text" name="username" value="test">
    <input type="text" name="password" value="test">
    <input type="submit">
</form>

我想我已经用尽了我可以创建的测试来尝试消除任何其他可能性,而它只是归结为一些非常奇怪的东西——我的 PHP 脚本没有收到 AJAX 请求中的 POST 字段。

【问题讨论】:

检查浏览器的开发控制台,看看它是否注册了跨域安全异常或其他被界面抑制的错误。从本地服务器移动到远程服务器时,这类错误很常见。 我在 Chrome 中,没有收到任何错误。请注意,.done() 正在触发,这意味着它收到了一个 2xx 标头和一个有效 JSON 对象的响应。没有控制台错误,没有 PHP 警告/错误日志,只是一个空请求...... $_REQUEST 的设置可以在 php.ini 中使用request_order 指令进行修改。尝试将脚本更改为$_POST 而不是$_REQUEST,看看是否可行。不知道你的主机是否支持自定义 php.ini 配置。 我在$_REQUEST 之前尝试过$_POST。我刚刚尝试了$_REQUEST,所以我可以查看$.get 版本是否正常工作。 您是否在 devtools 中验证了参数确实已发送?​​ 【参考方案1】:

因为服务器能够接收来自 HTML 的 post 值。 jQuery post 方法可能有问题。因此,您可以在 jQuery post 上尝试使用 ajax 函数来发布数据。替换以下功能,看看天气是否有效。

$.ajax(
type: "POST",
url: "api/login.php",
   data:  username: 'test', password: 'test' 
)
.done(function( res ) 
   alert(res.response);
);

【讨论】:

如果您阅读 jQuery 源代码,您可以看到 $.post 正是这样做的。奇怪的是,这是一个与缺少域有关的问题,因此服务器配置中一定有一些奇怪的东西(因为所有路径都正确解析并且没有与来源相关的错误)。

以上是关于从 AJAX 请求中去除 POST 的 PHP 配置?的主要内容,如果未能解决你的问题,请参考以下文章

为啥PHP收不到AJAX发出的post请求

当我将 var 从 ajax 发送到 php 时,如果 (isset $_Post[]) 不起作用

Ajax请求从PHP获得不同的响应值

PHP AJAX表单POST请求 - HTML表单POST /提交与AJAX / Javascript示例/教程

php判断请求类型(ajax|get|post|cli)

Ajax Post请求失败[重复]