我不知道我的代码发生了什么,当我运行它时,有时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而不是网页中。但我得到一个“解析错误:语法错误,意外'如果'(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();
});
});
感谢大家的回答,但希望这有助于其他人。
答案 0 :(得分:0)
如果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'
});
});
如果要处理响应,则应添加完整参数。
您的错误是,您在发送请求之前使用window.location.href
重定向页面。因此,您的请求永远不会被发送,而是直接调用PHP-File,而不是通过AJAX,而不是使用nessecary数据。因此,您缺少PHP文件中的数据。
答案 1 :(得分:0)
您需要尝试让自己的设置更容易一些,所以这里有一些可以帮助您简化此操作的内容。你可能已经或可能没有完成其中的一些,所以无视你已经做过的事情:
data
json_encode()
字段即可
success
功能,以便轻松查看返回<强> /config.php 强>
添加所有重要的偏好设置并将其添加到每个顶级页面。
session_start();
define('URL_BASE','http://www.example.com');
define('URL_AJAX',URL_BASE.'/ajax/dispatch.php');
define('FUNCTIONS',__DIR__.'/functions');
<强>形式:强>
只需制作一个data
即可发送一组数据键/值。
<button class="cart" data-instructions='<?php echo json_encode(array('name'=>'Whatever','price'=>'17.00','action'=>'add_to_cart')); ?>'>Add to Cart</button>
给你:
<button class="cart" data-instructions='{"name":"Whatever","price":"17.00","action":"add_to_cart"}'>Add to Cart</button>
<强>的Ajax:强>
只需发送普通对象
$(document).ready(function(){
// Doing it this way allows for easier access to dynamic
// clickable content
$(this).on('click','.cart',function(e)){
e.preventDefault();
// Get just the one data field with all the data
var data = $(this).data('instructions');
$.ajax({
data: data,
type: 'POST',
// Use our defined constant for consistency
// Writes: http://www.example.com/ajax/dispatch.php
url: '<?php echo URL_AJAX; ?>',
success: function(response) {
// Check the console to make sure it's what we expected
console.log(response);
// Parse the return
var dataResp = JSON.parse(response);
// If there is a fail, show error
if(!dataResp.success)
alert('Error:'+dataResp.message);
}
});
});
});
<强> /functions/addProduct.php 强>
理想情况下,您可能希望使用某种ID
或sku
作为密钥,而不是名称
// You will want to pass a sku or id here as well
function addProduct($name,$price)
{
$_SESSION['cart'][$name]['name'] = $name;
$_SESSION['cart'][$name]['price'] = $price;
if(isset($_SESSION['cart'][$name]['qty']))
$_SESSION['cart'][$name]['qty'] += 1;
else
$_SESSION['cart'][$name]['qty'] = 1;
return $_SESSION['cart'][$name];
}
<强> /ajax/dispatcher.php 强>
调度程序只是作为AJAX请求调用操作。由于返回机制的性质,您可以将其展开以返回html,或者连续运行多个命令,或者只运行一个或其他任何命令。
# Add our config file so we have access to consistent prefs
# Remember that the config has session_start() in it, so no need to add that
require_once(realpath(__DIR__.'/../..').'/config.php');
# Set fail as default
$errors['message'] = 'Unknown error';
$errors['success'] = false;
# Since all this page does is receive ajax dispatches, action
# should always be required
if(!isset($_POST['action'])) {
$errors['message'] = 'Action is require. Invalid request.';
# Just stop
die(json_encode($errors));
}
# You can have a series of actions to dispatch here.
switch($_POST['action']) {
case('add_to_cart'):
# Include function and execute it
require_once(FUNCTIONS.'/addProduct.php');
# You can send back the data for confirmation or whatever...
$errors['data'] = addProduct($_POST['name'],$_POST['price']);
$errors['success'] = true;
$errors['message'] = 'Item added';
# Stop here unless you want more actions to run
die(json_encode($errors));
//You can add more instructions here as cases if you wanted to...
default:
die(json_encode($errors));
}