我正在尝试使用jQuery AJAX函数在警告框中输出 $ _ POST 值,但我的PHP控制器中的$ _POST值始终为空,我总是得到一个空数组响应。
我使用的是PHP 5.5版,jQuery 2.2.3版
(我已尝试过针对此问题的多种可能解决方案,但我仍无法找到解决此问题的正确方法。)
1。这是我的AJAX代码(我没有使用提交功能,我只是在没有重定向的情况下更新网页上的某些内容):
$.ajax({
method: 'POST',
url: '../OrganizationController.php',
dataType: "json",
contentType: "application/json",
data: {'myForm':$('#myForm').serialize()},
success: function(data){
alert(data);
},
error: function(xhr, desc, err){
console.log(err);
}
});
2. 我的简单PHP控制器:
<?php
include('../mysql_conn.php');
$value;
if ($_POST['myForm']) {
$value= $_POST['myForm'];
header('HTTP/1.1 200 OK');
} else {
header('HTTP/1.1 500 Internal Server Error');
}
header('Content-Type: application/json');
echo json_encode($value);
...
?>
3. 我的简单形式:
<form id="myForm">
<input type="text" name="name" title="Name"/>
<input type="button" name="click">Press</input>
</form>
控制器正在运行。如果我想用我的输入或一些测试文本输出响应 - 一切正常,我在成功提示框中输入文本。
我尝试了不同的方法,几乎找到了类似问题的所有答案。
我曾尝试删除 dataType ,尝试将其更改为文字,尝试删除 contentType ,将数据添加到对象中人们建议的许多答案,用简单的值来测试,例如 {&#39; name&#39;:John} 等, 试图用一个输入和文本字段制作一个非常简单的表单。什么都没有帮助。
问题:
您能否就此问题或我的代码或其他类似代码的一些小例子提出建议,并为我的问题提供可能的解决方案?
修改
我们有一个非常翔实的discussion,但不幸的是,这些解决方案都没有帮助。但现在我们知道在其他浏览器或计算中一切正常,问题可能更严重(在配置等方面)。
答案 0 :(得分:3)
在PHP文件中,您只能按名称检索输入参数。比如,在您的表单中,如果您有电子邮件或电话号码,并且您将它们发送到您的控制器文件,那么请在控制器文件中使用它们的名称而不是表单名称来获取它。
以下是执行此操作的正确代码:
$.ajax({
method: 'POST',
url: 'test.php',
dataType: "json",
data: $('#myForm').serialize(),
success: function(data) {
alert(data);
},
error: function(xhr, desc, err) {
console.log(err);
}
});
在PHP文件中,获取
之类的值<?php
if ($_POST['name']) {
$value= $_POST['name'];
} else {
header('HTTP/1.1 500 Internal Server Error');
}
header('Content-Type: application/json');
echo json_encode($value);
?>
我假设电子邮件是您表单中的字段。
试试这个!
编辑:刚刚在PHP文件中替换了POST param,因为我看到“name”是表单中的一个字段。干杯!
P.S:contentType:application / json有时不起作用。在这里你可以看到一些线程:Github Thread
答案 1 :(得分:1)
问题是因为您将表单编码数据放在JSON对象中。除了冗余之外,所有这些都会让您的PHP代码混乱。
要解决此问题,只需发送序列化表单并使用$_POST
正常检索已发送的字段。
$.ajax({
method: 'POST',
url: '../OrganizationController.php',
dataType: "json",
data: $('#myForm').serialize(),
success: function(data){
alert(data);
},
error: function(xhr, desc, err){
console.log(err);
}
});
if ($_POST['input-field-name-here']) {
// do something with the data here...
header('HTTP/1.1 200 OK');
} else {
header('HTTP/1.1 500 Internal Server Error');
}
答案 2 :(得分:0)
我终于找到了解决方案!
三天我试图解决这个问题。 我正在使用PHPStorm IDE v.2016.1和它自己的内置服务器。
所以,当我用它自己的Apache服务器切换到XAMPP时,问题就解决了。一切都在不同的变种中工作正常,所以问题不在我的代码中。 我发现this is the real bug in PHPStorm
解决此问题: 只需切换到另一台服务器,不要使用PHPStorm p.s.即使我在PHPStorm IDE中更改了多个服务器 - 问题也没有解决,所以要小心。