You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery向PHP传参并设置Cookie时的显示问题及解决

最近碰到个AJAX传值的小坑,控制台明明显示请求成功,但后端页面就是拿不到数据,折腾了一会儿终于找到问题所在,分享下解决方案:

问题场景

我在页面Document Ready时执行一段JS代码,从页面元素中获取日期值(示例值:12 maart 2020),通过AJAX POST请求发送到datum.php,打算把日期存到Cookie里。结果控制台打印了成功日志,但访问datum.php时只显示Date is: ,完全看不到预期的日期内容。

初始前端JS代码

$(document).ready(function() {
  setTimeout( function() { 
    var datum_hoofdafspraak = $(".bookly-cart-primary td:nth-child(2)").html(); 
    console.log(datum_hoofdafspraak); // 正常输出日期字符串
    $.ajax({ 
      type: 'POST', 
      url: '/datum.php', 
      data: datum_hoofdafspraak, // 这里是核心问题
      dataType: 'text', 
      success: function() { 
        console.log("Datum sent to datum.php"); 
      }, 
    }); 
  }, 500);
});

后端datum.php代码

<?php session_start(); 
// Check if request method is post 
if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
  foreach ($_POST as $key => $value) { 
    // 自定义Cookie键名
    switch ($key) { 
      case 'datum': 
        $cookie_key = 'ingevoerde_datum'; 
        break; 
      default: 
        $cookie_key = $key; 
        break; 
    } 
    // 设置有效期半小时的Cookie
    setcookie($cookie_key, $value, time()+1800*1, "/"); 
  } 
} 
echo "Date is: " . $_COOKIE['ingevoerde_datum']; 
?>
问题根源

前端AJAX的data参数直接传了一个字符串,没有指定对应的键名。这会导致后端$_POST数组里的键是一个空字符串(或者默认的占位键),根本匹配不到PHP代码里switch分支的'datum' case,自然就不会设置ingevoerde_datum这个Cookie,最后页面输出时当然拿不到值。

修复方案

把AJAX的data参数改成键值对对象,明确指定键名为datum,这样后端就能正确识别并匹配到对应的分支:

// 修正后的data参数
data: { datum: datum_hoofdafspraak },

完整的修正后JS代码:

$(document).ready(function() {
  setTimeout( function() { 
    var datum_hoofdafspraak = $(".bookly-cart-primary td:nth-child(2)").html(); 
    console.log(datum_hoofdafspraak); 
    $.ajax({ 
      type: 'POST', 
      url: '/datum.php', 
      data: { datum: datum_hoofdafspraak }, // 已修复
      dataType: 'text', 
      success: function() { 
        console.log("Datum sent to datum.php"); 
      }, 
    }); 
  }, 500);
});

这样修改后,后端$_POST['datum']就能正确接收到前端传递的日期值,switch分支会匹配到'datum'并设置ingevoerde_datum Cookie,再访问datum.php时就能正常显示Date is: 12 maart 2020这类内容了。

内容的提问来源于stack exchange,提问作者LTCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:27:46