jQuery AJAX/POST不向PHP发送数据

C. *_*diu 28 php ajax jquery post

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

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

jQuery的:

$.ajax({
    url: "ajax/add-user.php",
    type: "POST",
    data: {name: 'John'},
    success: function(data){
        console.log(data);
    }
});
Run Code Online (Sandbox Code Playgroud)

PHP

echo json_encode($_POST);
Run Code Online (Sandbox Code Playgroud)

而已.我总是回来一个空数组作为回应.我试过了serialize(),data:但响应总是空的.我没有得到任何错误,只是一个空数组,当我应该得到发布的值.

例如,如果在php中我尝试了echo一些硬编码变量,我会得到它们,但是$_POST并且$_GET不起作用.

我如何识别问题的任何解决方案或方法?

谢谢.

编辑/解决方案

好的,所以似乎问题是.htaccess重写了url并删除了扩展名.在网络选项卡中,确实永久地移动了请求.从ajax url中删除.php扩展名:解决了它.谢谢你,不好意思浪费时间.干杯

dre*_*ver 22

你需要在ajax调用中将数据类型设置为json

JQUERY CODE:

$.ajax({
  url: "ajax/add-user.php",
  type: "POST",
  dataType:'json',
  data: {name: 'John'},
  success: function(data){
      console.log(data);
  }
});
Run Code Online (Sandbox Code Playgroud)

同时验证你的后端代码(php),它是否可以接受json数据?

如果没有,请配置如下标题

PHP代码:

json

快乐编码:

  • 或者将其添加到你的ajax对象:contentType:`"application/json; charset = utf-8",` (4认同)
  • 发现这个问题是因为`方法:"POST"`无效.[根据文档](http://api.jquery.com/jQuery.ajax/),`type`应该用于jQuery版本<1.9.0而不是`method`.我没有意识到CMS正在使用1.8.2! (4认同)

小智 12

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

  1. 我的POST数据被重定向为301
  2. 我的服务器请求是GET
  3. 我没有得到我的POST数据

我的理由 - 我在服务器上有一个网址注册为:

http://mywebsite.com/folder/path/to/service/
Run Code Online (Sandbox Code Playgroud)

但是我的客户打来电话:

http://mywebsite.com/folder/path/to/service
Run Code Online (Sandbox Code Playgroud)

服务器上的.htaccess将此读取为301 GET重定向到正确的URL并删除POST数据.简单的解决方案是仔细检查网址路径.

@ C.Ovidiu,@ MarcB - 你们两个人在调试中节省了很多时间!


小智 6

为什么不使用jQuery.post

$.post("ajax/add-user.php",
       {name: 'John'},
       function(response){
           console.log(response);
       }
);
Run Code Online (Sandbox Code Playgroud)

然后在你的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;
Run Code Online (Sandbox Code Playgroud)

  • jQuery.ajax包装了此功能-OP已经在后台使用了它 (2认同)

Gav*_*vin 6

我遇到了同样的问题,问题是对象中的变量之一data未定义。由于某种原因,阻止了发布数据的发送。将变量设置为未定义以外的其他值可以解决问题。


gtr*_*onp 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);}
});
Run Code Online (Sandbox Code Playgroud)

(所以你会收到一个错误和成功警报,确保你收到的是html。这些额外的参数将帮助你微调你的ajax调用。稍后使用异步true/false)

另外,在新窗口中运行程序 ajax/add-user.php (输入 url)并查看它回显的内容。编辑程序并强制回显您的内容“ie legend hello world”并查看您的 ajax 是否收到消息。

祝你好运。