我想将元素的id发送到php并为此创建会话。
这是来自php文件:
<?php
$sql = "SELECT id FROM products";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)) {
?>
<tr class="table-manufacture-tr">
<td class="table-manufacture-td-statys">
<div class="warehouse-window-content-dropdown-plus2 plus">
<a class="open_item" data-id=<?php echo "\"".$row['p_id']."\"";?>
style="text-decoration: none; color: #D3D3D3;">Click</a>
</div>
</td>
</tr>
<?php
}
?>
并在此文件中使用javascript代码:
$(document).on('click', '.open_item', function(event){
var data_item = this.getAttribute("data-id");
$.ajax({
url: 'get_id.php',
type: 'POST',
data-type: 'json',
data: { id: data_item },
contentType: 'application/x-www-form-urlencoded',
success: function(data){
console.log(data);
},
error: function(){
console.log("not working");
}
});
});
这是get_id.php:
<?php
session_start();
$_SESSION['item_id'] = json_encode($_POST);
header("Content-Type: application/json", true);
?>
我也尝试过没有内容类型且没有json。 “var data_item”打印id正确,但php不会创建会话,并且在控制台中也清除(无)。
答案 0 :(得分:1)
您没有在会话中获取数据的原因是,您没有为会话分配适当的值。它也应该是json_decode
而不是json_encode
。
替换
$_SESSION['item_id'] = json_encode($_POST);
与
if (!empty($_POST['id'])) {
$_SESSION['item_id'] = json_decode($_POST['id']); // use json_decode
}
答案 1 :(得分:1)
在我看来,您在代码中犯了一些小错误,就像您回复 $row['p_id']
,而您的查询应该返回id
而不是p_id
假设您的代码正在减去,ajax
您发送data-type
JavaScript时出错了,请尝试使用下面的代码编写代码。
// modify your php code
<?php
$sql = "SELECT id FROM products";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_assoc($result)) { ?>
<tr class="table-manufacture-tr">
<td class="table-manufacture-td-statys">
<div class="warehouse-window-content-dropdown-plus2 plus">
<a class="open_item" data-id=<?php echo "\"".$row['id']."\"";?>
style="text-decoration: none; color: #D3D3D3;">Click</a>
</div>
</td>
</tr>
<?php } ?>
// modify your jQuery
$(document).on('click', '.open_item', function(event){
var data_item = $(this).data("id");
$.ajax({
url: 'get_id.php',
type: 'POST',
dataType: 'json',
data: { id: data_item },
success: function(data){
console.log(data);
},
error: function(){
console.log("not working");
}
});
});
<?php
session_start();
header("Content-Type: application/json", true);
$_SESSION['item_id'] = json_encode($_POST["id"]);
echo json_encode(['data_id' => $_SESSION['item_id']]);
?>
答案 2 :(得分:0)
您可以使用
$_SESSION['item_id'] = json_encode($_POST['id']);
而不是
$_SESSION['item_id'] = json_encode($_POST);
这样可以正常工作。
答案 3 :(得分:0)
我不知道你要做什么,但是从你的JS看起来你希望PHP脚本 - 你向它发布一些数据 - 返回一个带有数据的json你刚刚张贴在其中。在这种情况下,试试这个,将你的get_id.php更改为:
<?php
session_start();
$_SESSION['item_id'] = json_encode($_POST);
header("Content-Type: application/json", true);
echo $_SESSION['item_id'];
?>
答案 4 :(得分:0)
我通过确保点击处理程序实际关闭来解决此问题。提醒(&#34;点击&#34;);作为点击处理程序中的第一件事来确保。
同时,删除json调用中的contentType。同样完全删除dataType(数据类型)。在php方面,替换header()行,所以(如上所述)php只是:
session_start();
$_SESSION['item_id'] = $_POST["id"];
echo $_SESSION['item_id'];
现在不要使用json_encode / decode。从您的代码中,不需要它。