如何通过AJAX发送PHP数组?

时间:2016-04-30 21:48:23

标签: javascript php jquery arrays ajax

在我的注册页面上,人们可以通过填写一些输入广告复选框来注册我的网站。它基本上是一个将数据发送到带有ajax的PHP页面的表单,然后将其放入数据库中。

javascript从表单中获取值,例如

var w = _("website").value;
var bio = _("bio").value;

然后像这样发送它ajax.send("w="+w+"&bio="+bio);这是应该的,但我想添加一些内容。

现在我有一些复选框,我希望通过ajax在一个变量中发布一个数组。所以在我的表单中我有这段PHP:

$licensessql = mysqli_query($db_conx, "SELECT * FROM licenses");
while($licenserecord = mysqli_fetch_assoc($licensessql)) {
echo '<input type="checkbox" value="'.$licenserecord["license"].'" name="licenses[]" id="'.$licenserecord["license"].'"><label for="'.$licenserecord["license"].'">'.$licenserecord["license"].'</label><br>';
}

使用纯PHP,这将工作并将复选框中的所有值放在数组license []中,但我不知道如何使用ajax实现此目的。如果我有5个复选框,我希望javascript var具有例如值'value1,value2,value3'并将其发布到PHP。

谢谢!

4 个答案:

答案 0 :(得分:1)

首先,我建议使用其他答案中公布的表单序列化。

回答您的实际问题:"If I have 5 checkboxes, I want the javascript var to have for example the value 'value1,value2,value3' and have that posted to PHP."

这是一个完整的工作示例(使用3个复选框),它将生成一个javascript变量,您可以使用该变量传递给您的AJAX post方法以供PHP处理。

JSFiddle:https://jsfiddle.net/o5q04vf0/

代码段:

$(document).ready(function() {
  $('#btnTest').click(function() {
    var checkBoxValues = $("[name=licenses\\[\\]]").map(function() {
      if ($(this).is(':checked')) {
        return this.value;
      }
    }).get().join();

    alert(checkBoxValues);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" value="0" name="licenses[]" />
<input type="checkbox" value="1" name="licenses[]" />
<input type="checkbox" value="2" name="licenses[]" />
<button id="btnTest">Submit</button>

这将帮助您指导正确的方向,但请考虑通过AJAX传递数据,与此处建议的其他成员一样。

答案 1 :(得分:0)

使用POST并将数组序列化为数据

&#13;
&#13;
  $data = $('form').serialize();
    $.post( "ajax/test.html", function($data) {
      $( ".result" ).html( data );
    });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="demo_form.asp">
  <input type="checkbox" name="vehicle" value="Bike"> I have a bike<br>
  <input type="checkbox" name="vehicle" value="Car" checked> I have a car<br>
  <input type="submit" value="Submit">
</form>
&#13;
&#13;
&#13;

在PHP中,您使用$_POST['attributeName']来读取值

答案 2 :(得分:0)

您可以使用serializeArray功能发送所有表单数据 Serialize用于GET,serializeArray对POST非常有用。

$('#btn-send').click(function(e) {
    $.ajax({
        url: 'url-to-data-send',
        method: 'post',
        data: $(this).closest('form').serializeArray(); <--- send form data
    }).done(function(response) {
        alert('form sent');
    })
});

或者您可以指定要定义发送的内容

var data = $(this).closest('form').serializeArray();
    console.log(data);

FIDDLE

**编辑**

这就是你想要的我猜

var arr = [];
$.map( $(this).closest('form').find('input[name="chck[]"]:checked'), function( n, i ) {
     arr.push({ name: $(n).attr('name'), value: $(n).val()});
});
console.log(arr);

FIDDLE 2

答案 3 :(得分:0)

我们走了:

你需要Serialize功能!以下是您如何使用它的一个例子:

HTML:

<form id="yourOrderFormId" method="post">
<input type="checkbox"/><input type="text"/>
<input type="checkbox"/><input type="text"/>
<button id="yourButtonId">Send</button>
</form>

jQuery Ajax:

<script>
    $('#yourButtonId').click(function(e) {

       var yourData = $("#yourOrderFormId").serialize(); 

        $.ajax({
            method: 'POST',
            url: '/yourUrl',
            data: yourData,
            dataType: 'html',
           success:success: function (result) {
           alert("Your message sent!");
           }
    });

或者与serializeArray();

一起使用
console.log($('form').serializeArray());

此处:enter link description here

希望它有所帮助;)