【问题标题】:$_POST doesn't reflect data being sent with jQuery post ajax$_POST 不反映使用 jQuery post ajax 发送的数据
【发布时间】:2013-04-03 17:14:21
【问题描述】:

我正在使用 ajax/json 将值发送到 php 函数,然后该函数将在页面上显示数据。我正在发送两个值$hours$memberID,但我似乎只能检索$hours 而不是$memberID。我通过 Firebug 运行该页面,在 javascript 页面上,两个变量的值在发送之前就被读取了。在 PHP 表单中,我运行了多个条件/回显语句以打印出这两个值,但仅显示 $hours。有什么想法吗?

PHP:

$result = array();
        if(!empty($_POST['hours'])) {
            $result['type'] = "success";
            $result['memberID'] = (int)$_POST['memID'];
            $result['hours'] = (int)$_POST['hours'];
            $result = json_encode($result);
            echo $result;
         }

Javascript:

 //numberofMembers is the total number of entries in the database
function subtractHours(numberofMembers) {
document.body.style.cursor = "wait";
var hours = document.getElementById("hours");
var i = 1;
var studentID;
while(i < numberofMembers) {        
    studentID = document.getElementById("member"+i);    
    alert(studentID.value);
    if(studentID && studentID.checked) {            
        $.ajax({
            type : 'post',
            datatype: 'json',
            url : 'hours_subtract.php',
            data : {hours : hours.value, memID : studentID.value},
            success: function(response) {
                if(response == 'success') {
                    alert('Hours subtracted!');
                } else {
                    alert('Error!');
                }
            }
        }); 
        //$.post( "subtract.php", {person: personId, personSalary: personSalary} );
    }
    i++;
}   
}

PHP(HTML 表单):

echo "<input type='checkbox' name='member{$attNumber}' id='member{$attNumber}' value=$studentID/>$attendees<br />";

编辑:如果我运行var_dump($_POST['memberID']);,它会打印出NULL。如果我运行var_dump($_POST),它会打印出array(2) { ["hours"]=&gt; string(1) "1" ["member3"]=&gt; string(8) "5101813/" }

编辑:我添加了使用member3 的PHP 代码。 编辑 2:这就是整个 Javascript 函数。 PHP 代码是我处理数据的全部。

【问题讨论】:

  • 如果您执行var_dump($_POST['memberID']); 会发生什么? var_dump($_POST);中显示的内容怎么样?
  • 你的sql查询在哪里?
  • 根据您的编辑 - ajax 请求没有发送memberIDmember3 来自哪里?我在你的数据中没有看到。 js中memberID.value等于什么?
  • @Daniel A. White,我的意思是从 URL 中检索数据,后面的 SQL 查询是为了根据这里的数据从数据库中检索数据。
  • 我已提交修改以删除对 MySQL 的引用。这纯粹是 PHP 无法获取您发送的数据的问题

标签: php jquery json


【解决方案1】:

在使用jQuery Ajax 时,如果发送的数据参数之一为null 或undefined,将被丢弃,不会发送到服务器。由于您没有在 PHP(服务器端)中获取此属性,因此很可能在初始客户端页面上没有正确设置它。

memberID.value // check this value

您能否检查 memberID.value 是否返回预期值?

【讨论】:

    【解决方案2】:

    我在我的网站上遇到了类似的问题。事实证明,我的 ajax 请求没有像我预期的那样通过$_POST 流发送数据。它实际上是通过请求正文发送的。

    要访问它,我必须执行以下操作:

    json_decode(file_get_contents(“php://input”));
    

    这会从请求正文中提取信息并将 json 数据(这是我将数据发送到服务器的格式)解码为 PHP 可用的内容。不确定,但您可能会遇到类似的问题。

    【讨论】:

      【解决方案3】:

      问题在于您的示例并未真正向我们展示您正在使用的代码。

      以下复制了您的 AJAX 请求,这是此问题的本质:

      $.post(
          'hours_subtract.php',
          {
              hours : "test-val-1",
              memberID : "test-val-2"
          },
          function(resp) {
              // Handle the response
          }
      );
      

      只有两个值被发送到服务器 - hoursmemberID

      但是,您声明 var_dump($_POST) 显示:

      { ["hours"]=&gt; string(1) "1" ["member3"]=&gt; string(8) "5101813/" }

      但是在您的 ajax 请求中,没有这样的 member3,并且 $_POST 中不存在 memberID。正如其他人所提到的,可能 memberID 的值为 null 并且未发送 - 但这并不能解释 member3 的来源。

      我建议弄清楚为什么你有 member3 在那里,它来自哪里,并在 javascript 端对 memberID 值进行调试,以确定它是否为空。

      【讨论】:

      • 我现在拥有的内容显示了我用于memberID 的内容,我不知道为什么它显示为member3。我可以将其更改为仅显示文本,例如studentID吗?
      • 我建议您在找出未按预期显示的原因之前不要进行进一步的工作。如果您愿意,请清理代码并重新发布 javascript/php。这通常是非常直接的东西,所以如果 $_POST 包含神秘数据,你需要找出原因。
      • 我想我找到了,似乎是因为我将$memberID 设置为document.getElementById("member"+i);,这就是member3 的来源。 i 只是我用来解析列表的变量。我如何将i 发送到 PHP 文档?
      • 不完全是,因为 PHP 说数组索引是 member3,而不是值。你基本上有memberID: document.getElementById("member"+i).value,它会发送$_POST['memberID'] = "value of member+i field"。某些东西实际上是发送 member3 作为密钥。
      • 我通过 Firebug 运行页面,我得到的 memberID 的值是 input#member3,然后斜体是 5101813
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2014-04-01
      • 1970-01-01
      • 2014-11-20
      • 2013-06-21
      • 2011-02-21
      相关资源
      最近更新 更多