jQuery AJAX / POST不向PHP发送数据

时间:2014-02-28 15:09:02

标签: php jquery ajax post

所以我现在有这个问题已经有一段时间了,我知道这个话题有无数问题,相信我,我尝试了所有解决方案,但仍然无效。

这是最简单的例子,在我的情况下不起作用

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扩展名:解决了它。谢谢你,不好意思浪费时间。干杯

7 个答案:

答案 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)

我最近遇到过这个问题但是由于其他原因:

  1. 我的POST数据被重定向为301
  2. 我的服务器请求是GET
  3. 我没有收到我的POST数据
  4. 我的理由 - 我在服务器上注册了一个网址:

    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);
}

如果您尝试尝试,这将起作用。