layui table中获取行的部分数据并ajax post传递给php后台查询,目前下述传递参数失败:
//监听行工具事件 ,删除一行,修改数据
table.on('tool(test1)', function (obj) {
var data = obj.data;
if (obj.event === 'edit') {
openedit(data);
} else if(obj.event === "detail") {
// 详情
let name= data["name"]; //获取行中的姓名
let timestamp = data["timestamp"]; //获取行中的时间
$.ajax({
type: "post",
url: "./order_detail.php",//传值给php后台,失败
data: {"name": name,"timestamp": timestamp}, //传值给php后台,失败
dataType:"json",
success: function (data) {
if (data) {
var data=data.data;
var layer = layui.layer;
layer.open({
type: 1,
content: $('#openProductBox'),
area: ['950px', '500px'], //宽高
success: function () {
table.render({
elem: '#openProductTable2'
, height: 'FULL-1',
url: "./order_detail.php",
page: false //关闭分页
, cols: [[ //表头
{field: 'id',title: 'ID', sort: true}
,{field: 'name', title: '姓名'},
,{field: 'age', title: '年龄'},
,{field: 'address', title: '地址'},
]]
});
// layer.close(index)
}
})
} else {
alert("失败")
}
}
})
}
});
php后台
```php
//如果无返回空
$name= $_post['name'];
$timestamp = $_post['timestamp'];
require './untils/pdo_connect_db.php';
$res = $pdo->query("SELECT * from table where name='$name' and addtime <='$timestamp' order by id desc limit 10")->fetchall(PDO::FETCH_ASSOC);
$num = count($pdo->query("SELECT * FROM table where name='$name' and addtime <='$timestamp' order by id desc limit 10")->fetchAll(PDO::FETCH_ASSOC));
$json = json_encode(array(
"code" => 0,
"msg" => "",
"count" => $num,
"data" => $res
), JSON_UNESCAPED_UNICODE); //JSON_UNESCAPED_UNICODE注意不加会乱码
echo $json;
?>
```
问题可能出在ajax中传递的数据格式,应该使用JSON.stringify()将对象转换成JSON字符串再传递。修改代码如下:
$.ajax({
type: "post",
url: "./order_detail.php",
data: JSON.stringify({"name": name,"timestamp": timestamp}),
dataType: "json",
success: function (data) {
// 省略部分代码
}
})
另外,在PHP中的$_POST变量名应该使用全大写。修改代码如下:
$name= $_POST['NAME'];
$timestamp = $_POST['TIMESTAMP'];
最后,注意SQL语句中的单引号和双引号的使用,应该使用一致的引号包裹字符串。修改代码如下:
$res = $pdo->query("SELECT * from table where name='$name' and addtime <= '$timestamp' order by id desc limit 10")->fetchall(PDO::FETCH_ASSOC);
$num = count($pdo->query("SELECT * FROM table where name='$name' and addtime <= '$timestamp' order by id desc limit 10")->fetchAll(PDO::FETCH_ASSOC));
以上是我作为PHP、Layui、Ajax技术领域的专家给出的解决思路,希望对您有帮助。