jQuery AJAX/POST 不向 PHP 发送数据
Posted
技术标签:
【中文标题】jQuery AJAX/POST 不向 PHP 发送数据【英文标题】:jQuery AJAX/POST not sending data to PHP 【发布时间】:2014-04-01 16:04:02 【问题描述】:所以我有这个问题有一段时间了,我知道关于这个主题有无数的问题,相信我,我尝试了所有可能的解决方案,但仍然不起作用。
这是最简单的示例,在我的情况下不起作用
jQuery:
$.ajax(
url: "ajax/add-user.php",
type: "POST",
data: name: 'John',
success: function(data)
console.log(data);
);
PHP
echo json_encode($_POST);
就是这样。
我总是返回一个空数组作为响应。我尝试使用serialize()
获取data:
,但响应始终为空。当我应该获取发布的值时,我没有收到任何错误,只是一个空数组。
如果,例如,在 php 中我尝试 echo
一些硬编码的变量,我会得到它们,但 $_POST
和 $_GET
不起作用。
我可以如何识别问题的任何解决方案或方法?
谢谢。
编辑/解决方案
好的,看来问题出在 .htaccess 上,它重写了 url 并删除了扩展名。在网络选项卡中,请求确实被永久移动了。从 ajax url 中删除 .php 扩展名:解决了。谢谢你,很抱歉浪费了时间。干杯
【问题讨论】:
试试echo $_SERVER['REQUEST_METHOD']
。如果您收到 POST 以外的内容,则您的原始帖子可能会被重定向,而您实际上是在执行 GET,这就是 $_POST 为空的原因。
你设置了 dataType: 吗?
所以是的...某些原因导致您的 POST 请求获得 http 301
重定向,从而导致您的脚本改为通过 GET 获取。
好的,看来问题出在 .htaccess 上,它重写了 url 并删除了扩展名。在网络选项卡中,请求确实被永久移动了。从 ajax url 中删除 .php 扩展名:解决了。谢谢你,很抱歉浪费了时间。干杯
@C.Ovidiu:请将最终解决方案添加为自我回答并将其标记为已接受,以便未来的搜索者受益。
【参考方案1】:
尝试编辑您的代码并使用:
$.ajax(url: 'ajax/add-user.php',
type: 'POST',
data: name: 'John',
dataType: 'html',
success: function(data)
alert("success");
console.log(data);
,error: function (xhr, ajaxOptions, thrownError) alert("ERROR:" + xhr.responseText+" - "+thrownError);
);
(因此您将收到错误和成功警报,请确保您收到的是 html。这些额外参数将帮助您微调 ajax 调用。稍后使用 async true/false)
另外,在新窗口中运行您的程序 ajax/add-user.php(键入 url)并查看它的回声。编辑程序并强制回显您的内容“即传奇的 hello world”并查看您的 ajax接收消息。
祝你好运。
【讨论】:
感谢您的回复,但正如我之前回复的那样,问题是因为 .htaccess 正在删除 .php 扩展名。【参考方案2】:需要在ajax调用中设置数据类型为json。
JQUERY 代码:
$.ajax(
url: "ajax/add-user.php",
type: "POST",
dataType:'json',
data: name: 'John',
success: function(data)
console.log(data);
);
同时验证你的后端代码(php)是否可以接受json
数据?
如果没有,请配置header如下:
PHP 代码:
/**
* Send as JSON
*/
header("Content-Type: application/json", true);
快乐编码:
【讨论】:
并且或将其添加到您的 ajax 对象中: contentType:"application/json; charset=utf-8",
发现这个问题是因为method: "POST"
不起作用。 Per the docs, type
应该用于 jQuery 版本 method。我没有意识到 CMS 使用的是 1.8.2!
感谢@LenArt。我一直习惯于使用 jQuery 的最新版本,但最近在一个旧项目上工作,不知道为什么 POST 不起作用。我在这个旧项目中也需要 type
:p
【参考方案3】:
为什么不使用jQuery.post?
$.post("ajax/add-user.php",
name: 'John',
function(response)
console.log(response);
);
然后在您的 PHP 中,您可以像这样保存输入:
if(isset($_POST["name"]))
$name= $_POST["name"];
file_put_contents("name.txt", $name)
header('HTTP/1.1 200 OK');
else
header('HTTP/1.1 500 Internal Server Error');
exit;
【讨论】:
jQuery.ajax
包装了这个功能 - OP 已经在使用这个功能了【参考方案4】:
我遇到了同样的问题,结果证明是我在data
对象中的变量之一未定义。出于某种原因,阻止了发布数据的发送。将变量设置为 undefined 以外的其他值可以解决问题。
【讨论】:
我也有这个,但它并不总是导致问题。知道这里实际发生了什么吗?【参考方案5】:我最近遇到了这个问题,但由于其他原因:
-
我的 POST 数据被重定向为 301
我的服务器请求是 GET
我没有收到我的 POST 数据
我的原因 - 我在服务器上有一个 url 注册为:
http://mywebsite.com/folder/path/to/service/
但我的客户正在打电话:
http://mywebsite.com/folder/path/to/service
服务器上的 .htaccess 将此读取为 301 GET 重定向到正确的 URL,并删除了 POST 数据。简单的解决方案是仔细检查 url 路径。
@C.Ovidiu、@MarcB - 你们两个为我节省了大量调试时间!
【讨论】:
这是我自己的情况,我自己永远也想不出来,谢谢分享!【参考方案6】:你应该检查你的 .htaccess 文件,用“#”符号关闭行
# To externally redirect /dir/foo.php to /dir/foo
# RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\.php [NC]
# RewriteRule ^ %1/ [R,L]
【讨论】:
【参考方案7】:我尝试了很多东西,但我发现下面的代码适合我:
if ( $_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) )
$_POST = json_decode(file_get_contents('php://input'), true);
如果你愿意,这将起作用。
【讨论】:
以上是关于jQuery AJAX/POST 不向 PHP 发送数据的主要内容,如果未能解决你的问题,请参考以下文章
jQuery - 在 AJAX POST 之后访问 PHP 数组值