为什么jQuery AJAX发送GET请求时PHP端$_GET收到的值为空字符串?
问题解决方案
核心问题原因
你当前的AJAX代码没有将序列化后的预订数据绑定到reservationData参数名下,直接把JSON字符串传给了data参数,因此后端无法通过$_GET['reservationData']获取到对应值。
修复方案(符合你要保留reservationData作为参数名的需求)
修改AJAX请求的data字段,将JSON字符串作为值绑定到指定参数名上即可,修改后代码如下:
var reservationData = { thename: "Maja_Bj", themovie: "1", theday: "Saturday" } console.log(reservationData); debugger; confirmReservation.on('click', function(){ $.ajax({ url: '/drupal/movie-reservation', type: 'GET', cache: false, // 仅修改这一行即可:把JSON字符串绑定到reservationData参数名 data: {reservationData: JSON.stringify(reservationData)}, success: function(data){ if(data.status == 'success'){ alert("Success! Your information has been saved!"); }else if(data.status == 'error'){ alert("Error! Please try again..."); } } }); });
后端PHP接收方式
在你的Drupal接口中用以下方式解析参数即可拿到对应字段:
// 先获取GET参数里的reservationData字符串,再转成数组 $reservationData = json_decode($_GET['reservationData'], true); // 直接读取字段即可 $thename = $reservationData['thename']; $themovie = $reservationData['themovie']; $theday = $reservationData['theday'];
可选优化方案
如果你不想在后端做JSON解析,也可以直接把reservationData对象传给data参数,jQuery会自动把对象序列化成URL参数,后端直接通过$_GET['thename']、$_GET['themovie']就能单独拿到每个字段,不需要额外解析:
// data字段改成直接传对象即可 data: reservationData,
注意:如果提交的是用户存储类数据,更推荐把请求
type改成POST,避免GET请求长度限制导致参数丢失,同时更符合数据提交的HTTP语义。
内容的提问来源于stack exchange,提问作者MajaB
相关产品推荐
相关产品推荐

