如何将带有jquery的所有元素的数组传递给php

时间:2016-07-18 11:29:37

标签: javascript php jquery arrays ajax

我正在尝试将数组从jQuery传递给PHP。

<input type="checkbox" id="name1" name="name[]" value="name1"> Name1
<input type="checkbox" id="name2" name="name[]" value="name2"> Name2
<input type="checkbox" id="name3" name="name[]" value="name3"> Name3<br />

<input type="checkbox" id="phone1" name="phone[]" value="samsung"> Samsung
<input type="checkbox" id="phone2" name="phone[]" value="nokia"> Nokia
<input type="checkbox" id="phone3" name="phone[]" value="motorola"> Motorola<br />
$(document).ready(function() {
    $(":checkbox").on('change', function() {
        var group = [];
        var mygroup = {};

        $(':checkbox:checked').each(function(i){    
            var val = this.value;
            var name = this.name;   
            mygroup[name] = val;
            var all = name + "=" + val;
            group.push(all);

            $.ajax({ 
                type: "POST", 
                url: 'testdraft1.php',
                data: mygroup, // TRIED WITH group and all also. Doesn't work.
                success: function(data) {
                    $("#result").html(data);
                }
            });     
        });
    });
});

使用此代码,数组将传递给PHP,但只有1个元素。即使我选择了多个元素。我做错了什么?

4 个答案:

答案 0 :(得分:1)

你在每个循环中调用ajax帖子,这意味着如果你检查五个方框,你将为每次调用的每次迭代发送一个单独的帖子。

这意味着第一个帖子只有一个复选框,第二个帖子将有两个,等等。

除非你真的想这样做,否则你需要在你的ajax调用之前关闭你的每个循环。

这并不能解决名称问题,但它会解决您只能将一个复选框发送到php的原因。

答案 1 :(得分:1)

这比使用FormData更简单。 (请注意,我已将name[]更改为name,将phone[]更改为phone。)我还将AJAX调用移到了each循环之外。

HTML:

<input type="checkbox" id="name1" name="name" value="name1"> Name1
<input type="checkbox" id="name2" name="name" value="name2"> Name2
<input type="checkbox" id="name3" name="name" value="name3"> Name3<br />

<input type="checkbox" id="phone1" name="phone" value="samsung"> Samsung
<input type="checkbox" id="phone2" name="phone" value="nokia"> Nokia
<input type="checkbox" id="phone3" name="phone" value="motorola"> Motorola<br />

JavaScript的:

$(document).ready(function() {
    $(":checkbox").on('change', function() {
        var mygroup = {};

        $(':checkbox:checked').each(function(i) {
            var val = this.value;
            var name = this.name;

            mygroup[name] = (mygroup[name] || []).concat([val]);
        });

        $.ajax({ 
            type: "POST", 
            url: 'testdraft1.php',
            data: mygroup,
            success: function(data) {
                $("#result").html(data);
            }
        });
    });
});

修改

这条线有点令人困惑:

mygroup[name] = (mygroup[name] || []).concat([val]);

这是一个更简单的版本:

// initialize with an empty array if needed
if (mygroup[name] === undefined) {
    mygroup[name] = [];
}
// append the most recent value to the array
mygroup[name].push(val);

答案 2 :(得分:0)

您的代码存在多个问题,

  1. AJAX代码应该在.each函数之外。
  2. change事件之外定义数组。
  3. 您无法在AJAX请求中直接发送数组。请使用FormData
  4. 所以改变你的代码,

    $(document).ready(function() {
            var group = []; //DEFINED THE ARRAY
            $(":checkbox").on('change', function() {
                $(':checkbox:checked').each(function(i) {
                    var val = this.value;
                    var name = this.name;
                var dataObject = {};
                dataObject.name = name;
                dataObject.val = val;
    
                group.push(dataObject);
    
            });
            var fd = new FormData();
            for (var i = 0; i < group.length; i++) {
                fd.append(group[i].name, group[i].val);
            }
            $.ajax({
                type: "POST",
                url: 'testdraft1.php',
                data: fd,
                success: function(data) {
                    $("#result").html(data);
                }
            });
        });
    });
    

答案 3 :(得分:-1)

<input type="checkbox" id="name1" name="name[]" value="name1"> Name1
<input type="checkbox" id="name2" name="name[]" value="name2"> Name2
<input type="checkbox" id="name3" name="name[]" value="name3"> Name3

<br />

<input type="checkbox" id="phone1" name="phone[]" value="samsung"> Samsung
<input type="checkbox" id="phone2" name="phone[]" value="nokia"> Nokia
<input type="checkbox" id="phone3" name="phone[]" value="motorola"> Motorola

<br />


$(document).ready(function() {
    $(":checkbox").on('change', function() {

    var group=[];   //DEFINED THE ARRAY
    var mygroup = {};  // DEFINED THE OBJECT

        $(':checkbox:checked').each(function(i){    

        var val= this.value;
        var id = this.id;   

        mygroup[id]=val;  //PUSH VALUES TO THE OBJECT mygroup

        var all = id+"="+val;

        group.push(all); // PUSH ALL CHECKBOX VALUES TO ARRAY

    $.ajax({ 
        type: "POST", 
        url: 'testdraft1.php',
        data : mygroup,             //TRIED WITH group and all also. Doesn't work.
        success: function(data){
        $("#result").html(data);
    }
   });  

    });
    });

});

使用相同的名称,而是更改名称,更改将适用于您的ID名称