AJAX POST无法正常工作,php不会创建会话

时间:2017-10-31 04:24:46

标签: javascript php ajax

我想将元素的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不会创建会话,并且在控制台中也清除(无)。

5 个答案:

答案 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。从您的代码中,不需要它。