$_POST在使用Jquery Ajax调用时为空,同时还会出现标头已发送警告


$_POST is empty when using Jquery Ajax calls also header already send warning appears

我正在开发一个PHP项目,需要使用jQueryAjax将数据从HTML页面发送到另一个PHP页面。

但是当我尝试echo时,$_POST显示为空。我试着调试这个问题,在谷歌上搜索了数百万次,但没有成功。另一件事是IDE显示警告Cannot modify header it's already sent 有点相似


index.html

 <html>
   <head>
   <title>Dashboard</title>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
   </head>
   <body>
        <form id="labelForm" name="labelForm" method="post">
             <label for="label">
              Create Label
                  <input id="label" name="label" type="text">
             </label>
             <input id="create" id="create" type="submit" value="Create">
       </form>
       <script type="text/javascript">
             $('#labelForm').submit(function (event) {
             event.preventDefault();
             alert("Send");
             $.ajax({
                  type: 'POST',
                  url: 'storerole.php',
                  data: {
                       pos:"aky"                
                  },
            success: function (data) {
                console.log(data);
            }
        });
    });
  </script>
  </body>
 </html>

storerole.php

<?php
   var_dump($_POST);
?>

附加信息:我还使用了适用于Chrome的AJAX调试器,并在控制台中发现了AJAX请求,这表明AJAX完成了它的工作,问题出在PHP中。PS:堆栈溢出搜索也做了很多。

编辑1输出array(1) { ["pos"]=> string(3) "aky" }显示在使用AJAX调试器的Chrome控制台中,而输出array(0) { }显示在storerole.php

编辑2form中删除了action以避免混淆。

php是无状态的——如果您发出ajax post请求,即一个包含ign post数据的请求。您将在javascript data变量中看到该请求的响应(如果执行console.log(data);,则在浏览器js控制台中可见)

如果您随后在浏览器中访问storerole.php,这是第二个单独的GET请求(没有POST数据)。

如果你想在浏览器中访问页面,只需进行正常的表单提交,例如删除javascript并让浏览器提交表单:

<html>
   <head>
   <title>Dashboard</title>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
   </head>
   <body>
        <form id="labelForm" name="labelForm" action="storerole.php" method="post">
             <label for="label">
              Create Label
                  <input id="label" name="label" type="text">
             </label>
             <input id="create" id="create" type="submit" value="Create">
       </form>
  </body>
 </html>

这表明AJAX完成了它的工作,并且问题在PHP

因此,您应该在服务器端进行调试,因为您已经发布了标记和js。


IDE显示类似于此的警告。无法修改已经发送的头

使用任何IDE开发都没有问题,但您应该在chrome、firefox等更新的浏览器中测试您的应用程序。

你应该留意浏览器的控制台,看看js的错误。这肯定会产生错误。

您不能在js对象中使用=签名:

pos="aky"

更改为:

pos : "aky"

ajax中的数据以javascript数组表示法语法发送,因此数据的格式为:
data: {'param1' : 'data' , 'param2' : 'data' }

在ajax内容中,您在数据中使用了=。您应该使用:而不是

$.ajax({
              type: 'POST',
              url: 'storerole.php',
              data: {
                   pos : "aky   //use : here                
              },
        success: function (data) {
            console.log(data);
        }
    });

使用下面给出的数据值:

data: { 
        'value1':'val1','value2':'val2','value3':'val3'               
      }

对于错误"Cannot modify header it have sended",可以使用php文件顶部的ob_start()。