阿贾克斯应该添加一个会话变量,但不能正常工作

时间:2018-07-16 20:35:02

标签: javascript php ajax

我对AJAX的经验很少,我正在尝试获得看起来简单到可以使用的东西。

我有一个下拉选择表单字段,该字段调用一个包含ajax调用的javascript函数。

<select onchange="update_session_value('123',this.value)">
<option value="1" >1</option>
    <option value="2" >2</option>       
</select>

JavaScript函数

<script>
    function update_session_value(id,value) {
        $.ajax({
            type: "POST",
            url: "untitled1.php",
            data: '{"id":"' + id + '","unit":"' + value + '"}',
            dataType: 'json',
            success: function (data) {
            },
            fail: function(data){
       alert('request failed'); }
        });

    }

</script>

这是untitled1.php上的代码,应该用来设置会话变量。

<?php
session_start();
if( (isset($_POST['id'])) && (isset($_POST['unit'])) ) {
    // save values from other page to session
    $_SESSION['cart'][$_POST['id']]['unit'] = $_POST['unit'];

}
?>

当打印出会话print_r($_SESSION)时,它根本没有被修改以反映ajax所做的任何更改。我认为ajax尚未运行。但是在完成这项工作时我已经达到了自己的极限。是的,我在两个页面上都使用session_start();

我认为问题出在ajax的数据部分;但是,我不确定... data: '{"id":"' + id + '","value":"' + value + '"}',我已经找到了多种传递1个以上参数的方法,但我无法使它们正常工作。

2 个答案:

答案 0 :(得分:1)

应该发送一个对象,而不是发送一个字符串。这样,您将在$_POST中有键值对,并且值将被正确编码。

使用当前的JavaScript,您需要解析原始输入并解码JSON(可能无效)。

因此您需要更改:

data: '{"id":"' + id + '","unit":"' + value + '"}',

收件人:

data: {"id": id, "unit": value},

答案 1 :(得分:0)

尝试将data参数更正为

data: {"id": id, "unit": value}

然后删除 dataType: 'json'