【发布时间】:2018-01-15 04:04:12
【问题描述】:
我正在开发我的第一个 php/SQL 数据库项目,我的目标是将一组复选框值存储到数据库中。
单击复选框表单上的提交时,我试图将我的 jquery 文档中的复选框值数组发布到 index.php
成功响应是我的 index.php 页面,我认为这是正确的,所以这对我来说似乎都是正确的,我很难弄清楚为什么
我的数组是由一系列 .push() 调用生成的,这些调用更新以确定一个框何时未被选中,并且仅在我单击我的表单提交时提交,这应该会触发 ajax 发布。
var checkArr =
[
{id: "CB1", val: "checked"},
{id: "CB3", val: ""},
{id: "CB5", val: ""},
{id: "CB4", val: "checked"},
{id: "CB2", val: ""}
];
//SUBMIT CHECKBOX VALUES TO PHP
$('#submitCheck').on('click', function(){
$.ajax({
url: 'index.php',
type: 'POST',
data: {checkArr:checkArr},
cache: false,
success: function(response){
alert("ok");
console.log(response);
}
});
});
但是,当我检查帖子是否有效时,我只返回“未设置”。
if(isset($_POST['checkArr'])){
$arr = $_POST['checkArr'];
echo $arr;
} else {
echo 'Is not set';
}
我知道有很多类似的问题,但不幸的是我没有找到任何解决方案。 我发现一个线程提到它可能会在处理帖子之前重定向我,所以我从我的表单中删除了该操作并且没有任何改变。我试图将我的输出字符串化为 json,但仍然存在同样的问题(即使由于 jquery 的原因 stringify 是多余的)。
编辑:完整代码 sn-p
var checkArr = [];
//COLOUR ITEMS ON PAGE LOAD
$(document).ready(function(){
var box = $(':checkbox');
if(box.is(':checked')){
box.parents("li").removeClass('incomplete');
box.parents("li").addClass('complete');
} else {
box.parents("li").removeClass('complete');
box.parents("li").addClass('incomplete');
}
});
//DELETE ITEM
$(document).on('click','.delete', function(){
console.log('DELETED');
var id = $(this).attr('id')//get target ID
var item = $(this).closest('li');//targets the li element
//AJAX
$.ajax({
url: 'delete.php',
type: 'POST',
data: { 'id':id },
success: function(response){
if(response == 'ok') {
item.slideUp(500,function(){
item.remove();
});
} else if(response == 'error') {
console.log("error couldn't delete");
} else {
console.log(response);
}
}
});
});
//CREATE ARRAY OF CHECKBOX VALUES
$('#checkform').on('click','.boxcheck', function(){
var check = $(this).prop("checked");
var val = "";
var tempId = $(this).attr('id');
if(check === true){
val = "checked";
console.log(val);
var tempArr = {
"id": tempId,
"val": val
};
checkArr.push(tempArr);
} else if (check === false){
val = "";
console.log(val);
for (var i = checkArr.length - 1; i >= 0; --i) {
if (checkArr[i].id == tempId) {
checkArr[i].id = tempId;
checkArr[i].val = val;
}
}
}
console.log(checkArr);
});
//CHANGE COLOUR OF ITEMS
$(':checkbox').change(function(){
var current = $(this);
if(current.is(':checked')){
current.parents("li").removeClass('incomplete');
current.parents("li").addClass('complete');
} else {
current.parents("li").removeClass('complete');
current.parents("li").addClass('incomplete');
}
});
//SUBMIT CHECKBOX VALUES TO PHP
$('#submitCheck').on('click', function(e){
e.preventDefault();
console.log(checkArr);
$.ajax({
url: 'index.php',
type: 'POST',
data: {checkArr:checkArr},
cache: false,
success: function(response){
alert("ok");
}
});
});
【问题讨论】:
-
var_dump($_POST);产生了什么? -
在 ajax 调用上方给出
console.log(checkArr),并检查您是否在那里获得了价值 -
您的 ajax 帖子在文档中准备好了吗?
$(document).ready(function () { //your code }); -
@AswinRamesh 好主意,不知怎的,它似乎完全空白……没想到。我在我的 .js 文档的开头将 checkArr 初始化为一个空数组,但只有这样,如果我将它移动到准备好的文档中,我就无法在它之外使用变量。
-
@user27 不,它不是,只有当我单击复选框表单上的提交时才会调用它。