我不知道我的代码正在发生什么,当我运行它时,SESSION有时会说存储了一个数组,有时却没有。我正在使用调试器检查会话。当我使用isset($ _ POST)时,返回值始终为false。我正在使用ajax将数组传递给php。
<?php
session_start();
if(isset($_POST['jExam'])){
$decode = json_decode($_POST['jExam']);
$_SESSION['receive'] = $decode;
$product = $_SESSION['receive'];
}
else{
echo "Failed to hold<br>";
}
?>
Javascript:
$(document).ready(function(){
$(".class").click(function(event)){
event.preventDefault();
window.location.href = 'example.php';
var jExample = JSON.stringify(array);
$.ajax({
data:{'jExam':jExample},
type: 'POST',
dataType: 'json',
url: 'example.php'
});
});
编辑:
弄清楚了为什么将数组存储到SESSION中,一旦单击打开另一个页面的按钮,然后在url中键入页面之前,将数组存储到SESSION中。不知道为什么。仍然不知道为什么ajax不发送帖子。
编辑2:
我创建了一个处理请求的文件,名为handle.php。因此,顶部的php脚本被添加到handle.php中,而不是网页中。但是我收到“解析错误:语法错误,意外的'if'(T_IF)”。上面的代码仍然相同。
handle.php:
<?php
session_start();
if(isset($_POST['jExam'])){
$decode = json_decode($_POST['jExam']);
$_SESSION['receive'] = $decode;
$product = $_SESSION['receive'];
}
else{
echo "Failed to hold<br>";
}
?>
编辑3:
我正在使用ajax将数组传递给php,以便将其存储到会话中,以便在另一个页面中使用该数组。问题是该数组没有传递到$ _POST中。我希望数组可以实际通过,因此可以在另一页上使用它。
解决了:
我所做的就是添加具有隐藏值的表单。值实际发布
<form id = "postform" action = "cart.php" method = "post">
<input type = "hidden" id="obj" name="obj" val="">
<input type = "submit" value = "Show Cart" id = "showcart">
</form>
在Javascript中:
$(document).ready(function(){
$("#showcart").click(function(){
var json = JSON.stringify(object)
$('#obj').val(json);
$('#obj').submit();
});
});
谢谢大家的回答,但希望对您有所帮助。
最佳答案
如果example.php是处理请求的php文件,则需要将js代码更改为
$(document).ready(function(){
$(".class").click(function(event)){
event.preventDefault();
var jExample = JSON.stringify(array);
$.ajax("example.php", {
data:{'jExam':jExample},
type: 'POST',
dataType: 'json'
});
});
如果要处理响应,则应添加complete-Parameter。
您的错误是,在发送请求之前,您正在使用
window.location.href
重定向页面。因此,您的请求永远不会发送,并且直接通过PHP而不是AJAX而不是必要的数据来调用PHP文件。因此,您丢失了PHP文件中的数据。