尝试使用ajax将嵌套数组发布到php

时间:2018-01-15 04:04:12

标签: php jquery arrays ajax

我正在开发我的第一个php / SQL数据库项目,我的目标是将一组复选框值存储到数据库中。

单击复选框表单上的提交,我试图将我的jquery doc中的复选框值数组发布到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也是多余的)。

修改:完整代码段

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");
            }
        });     
});

3 个答案:

答案 0 :(得分:0)

我尝试了你的代码,它对我来说很完美。

现在我唯一能想到的是你的ajax请求中的url。确保您确实提交到index.php

答案 1 :(得分:0)

您可以使用JSON.stringify()将数组从ajax提交到php

答案 2 :(得分:0)

发布此处进行更新以防万一有人遇到类似的问题,代码本身是正确的(有点),经过大量的挖掘和询问,结果发现我使用的本地服务器,XAMPP,太小了一个POST上传限制因此php端的空数组,将php.ini上传限制从2mb增加到10mb最终修复了它!