【问题标题】:Trying to post nested array to php with ajax尝试使用 ajax 将嵌套数组发布到 php
【发布时间】: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 不,它不是,只有当我单击复选框表单上的提交时才会调用它。

标签: php jquery arrays ajax


【解决方案1】:

我尝试了您的代码,它对我来说非常有效。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-04-09
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多