我对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个以上参数的方法,但我无法使它们正常工作。
答案 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'