【问题标题】:Empty $_POST in PHP after ajax call with jquery使用 jquery 进行 ajax 调用后,PHP 中的 $_POST 为空
【发布时间】:2014-08-06 17:22:41
【问题描述】:

我有一个 javascript 函数,可以从一些输入字段和复选框中收集数据。
我想将该数据发送到 PHP 文件,然后从数据库返回一些信息。
但是我在 PHP 中获取 POST 数据时遇到问题,所以这里我只关注这个问题,不会处理任何数据库。

在 HTML 表单中收集的数据在 Javascript 对象中返回,我使用 JSON.stringify(data) 将其转换为 Json 并得到:

{"motscle":[""],"categories":[1,2,3],"prix":[{"min":0,"max":50},{"min":50,"max":100},{"min":100,"max":200},{"min":200,"max":500},{"min":500,"max":1000},{"min":1000,"max":2000}],"dimensions":{"longueur":"","largeur":"","hauteur":""}}

您可以在 http://jsonformatter.curiousconcept.com/ 上对其进行测试,以查看展开后的表单并查看它是有效的 JSON。所以,我认为问题不在这里。

然后我有一个类似的 ajax 调用用于测试目的(var theJSON 包含上面的 JSON 字符串):

 $.ajax({                                      
          url: 'post.php',                           
          data: theJSON ,   
          dataType: 'json', 
          error: function(){
               console.log("Error in ajax request");
          },
          success: function(data)          
          {
               console.log("Success of ajax request");
               console.log(data);
          }
     });

我的测试PHP文件post.php是这样的:

<?php
     header('Content-Type: application/json; charset=utf-8');
     echo json_encode($_POST);
?>

ajax 调用没问题,因为我在 js 控制台中得到了它:

Success of ajax request
[] 

但是,如您所见,我还有一个空数组 []。我期待得到 PHP 应该发送给我的 $_POST 内容。

我不知道我错在哪里。为什么我没有得到$_POST 中的数据?

【问题讨论】:

  • 打开浏览器的开发工具并在控制台中观察请求/响应。您应该看到发送的数据和返回的数据。这是您进行故障排除的起点。
  • 回显 $_GET 并查看它是否为空。如果正在填充 GET,请将属性 type: "POST" 添加到您的 ajax 调用中。
  • @Rickkwa 这就是问题所在,谢谢

标签: php jquery ajax


【解决方案1】:

ajax请求的默认类型是GET,要么改变ajax

$.ajax({                                      
      url: 'post.php',                        
      type : 'POST',
      data: theJSON ,   
      dataType: 'json', 
      error: function(){
           console.log("Error in ajax request");
      },
      success: function(data)          
      {
           console.log("Success of ajax request");
           console.log(data);
      }
 });

或检查 GET

echo json_encode($_GET);

【讨论】:

  • 谢谢你解决了我的问题。我还有另一个问题。事实上,我必须将theJSON 作为对象而不是作为 JSON 的字符串表示形式发送。那是因为 Jquery 处理了我认为的字符串化。
  • 是的,jQuery接受对象和数组,并为你字符串化,但也应该接受字符串,但对象不需要字符串化,使用jQuery时直接发送即可
猜你喜欢
  • 1970-01-01
  • 2013-02-16
  • 2016-05-02
  • 2017-03-18
  • 2015-05-26
  • 2015-07-29
  • 2010-12-11
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多