所以我现在有这个问题已经有一段时间了,我知道这个话题有无数问题,相信我,我尝试了所有解决方案,但仍然无效。
这是最简单的例子,在我的情况下不起作用
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重写了网址并删除了扩展名。在网络选项卡中,确实永久地移动了请求。从ajax url中删除.php扩展名:解决了它。谢谢你,不好意思浪费时间。干杯
答案 0 :(得分:21)
您需要在ajax调用中将数据类型设置为json。
JQUERY CODE:
$.ajax({
url: "ajax/add-user.php",
type: "POST",
dataType:'json',
data: {name: 'John'},
success: function(data){
console.log(data);
}
});
同时验证你的后端代码(php),它是否可以接受json
数据?
如果没有,请按如下方式配置标题:
PHP代码:
/**
* Send as JSON
*/
header("Content-Type: application/json", true);
快乐编码:
答案 1 :(得分:11)
我最近遇到过这个问题但是由于其他原因:
我的理由 - 我在服务器上注册了一个网址:
http://mywebsite.com/folder/path/to/service/
但是我的客户正在打电话:
http://mywebsite.com/folder/path/to/service
服务器上的.htaccess将此读取为301 GET重定向到正确的URL并删除POST数据。简单的解决方案是仔细检查网址路径。
@ C.Ovidiu,@ MarcB - 你们两个人在调试中节省了很多时间!
答案 2 :(得分:6)
为什么不使用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;
答案 3 :(得分:4)
我遇到了同样的问题,问题结果是data
对象中的一个变量未定义。由于某种原因阻止了发送数据。将变量设置为undefined以外的其他东西可以解决问题。
答案 4 :(得分:0)
尝试编辑代码并使用:
$.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收到消息。
祝你好运。答案 5 :(得分:0)
您应该检查您的.htaccess文件,并用“#”符号关闭行
# To externally redirect /dir/foo.php to /dir/foo
# RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
# RewriteRule ^ %1/ [R,L]
答案 6 :(得分:0)
我尝试了很多事情,但发现以下适用于我的代码:
if ( $_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) ) {
$_POST = json_decode(file_get_contents('php://input'), true);
}
如果您尝试尝试,这将起作用。