Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX POST不工作,php不';不创建会话_Javascript_Php_Ajax - Fatal编程技术网

Javascript AJAX POST不工作,php不';不创建会话

Javascript AJAX POST不工作,php不';不创建会话,javascript,php,ajax,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-st

我想将元素的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
}
?>
这是get_id.php:

<?php
    session_start();
    $_SESSION['item_id'] = json_encode($_POST);
    header("Content-Type: application/json", true);
?>


我也尝试过不使用内容类型和json。“var data_item”打印的id是正确的,但php不会创建会话,并且在控制台中也会清除(nothing)。

会话中没有获取数据的原因是,您没有为会话分配正确的值。它也应该是
json\u decode
而不是
json\u encode

替换

$_SESSION['item_id'] = json_encode($_POST);

你可以用

$\u SESSION['item\u id']=json\u encode($\u POST['id'])

而不是

$_SESSION['item_id'] = json_encode($_POST);

这将很好。

我不知道您想做什么,但从您的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'];
?>

在我看来,您在代码中犯了一些小错误,就像您在回显
$row['p\u id']
当您的查询应该返回
id
而不是
p\u id
时,您在
ajax
中也犯了错误,您正在发送
数据类型
JavaScript,假设您的代码是减法的,请尝试使用下面的代码i代码

// 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']]);
?>
//修改php代码
//修改jQuery
$(文档)。在('单击','上。打开项',函数(事件){
var data_item=$(此).data(“id”);
$.ajax({
url:'get_id.php',
键入:“POST”,
数据类型:“json”,
数据:{id:data_item},
成功:功能(数据){
控制台日志(数据);
},
错误:函数(){
控制台日志(“不工作”);
}
});
});

我将通过确保单击处理程序实际运行来解决此问题。发出警报(“点击”);作为中的第一件事,单击处理程序以确保

同时,删除json调用中的contentType。同时完全删除数据类型(数据类型)。在php端,替换header()行,以便(如上所述)php只是:

session_start();
$_SESSION['item_id'] = $_POST["id"];
echo $_SESSION['item_id'];

现在不要使用json_编码/解码。从您的代码中,它是不需要的。

您如何知道会话没有生成?您是否在任何地方打印会话数据?我的ajax调用使用“数据类型”而不是“数据类型”。数据类型也有效吗?另外,php是否返回json数据?尝试将
数据类型
替换为
数据类型
post变量不是$\u post[“id”]?谢谢,我没有注意到它是否需要json\u encode()?我得到的印象是,这可能只是一个字符串。正如数据类型所提到的:“json”意味着需要json格式的数据,因此将添加json_encode。它是“数据类型”,而不是“数据类型”。它是指预期响应的数据类型。参考:echo['data\u id'=>$\u会话['item\u id']部分将只返回一个字符串
数组
,您不能直接回显数组是我的错误现在我调整了代码。请立即尝试。您是双重的
json\u编码
-ing,在json中发送json数据是不明智的,它会导致类似这样的结果
{“test”:“{\“json\”:\“json data\”}”
您可以发送
{“json”:“json data”}
最后一行仅用于测试,不需要这一行,您可以删除它,因为您只需要在会话中设置id。为此,您也只能使用
$\u SESSION['item\u id']=$\u POST[“id”]
// 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']]);
?>
session_start();
$_SESSION['item_id'] = $_POST["id"];
echo $_SESSION['item_id'];