从 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 配置?的主要内容,如果未能解决你的问题,请参考以下文章
当我将 var 从 ajax 发送到 php 时,如果 (isset $_Post[]) 不起作用