【问题标题】:How to send a checkbox group via ajax in jquery?如何在 jquery 中通过 ajax 发送复选框组?
【发布时间】:2012-02-15 18:04:53
【问题描述】:

我需要通过 jquery 中的 ajax 发送一组复选框(以及一些其他数据)。

到目前为止我所做的是:

var arr = $('#somediv input[type="checkbox"]:checked').val() || [];
$.post("/somephpfile.php", {str: str, arr: arr}, function(data) {...

但我的问题是 arr 从来都不是一个数组。我需要将其发送为 ?str=data&arr=foo&arr=bar

我想这是一个非常简单的问题,但由于我对 jquery 很陌生,所以我会问专业人士。 我该怎么做?

谢谢。


我的错,是 php

【问题讨论】:

  • 如果它是一个数组,我意识到我可能需要通过自己格式化它来使其成为一个字符串。

标签: jquery ajax


【解决方案1】:

您可能正在寻找.serialize

更通用的解决方案是创建一个包含所有参数的表单,然后对其进行序列化。

【讨论】:

    【解决方案2】:

    遇到了类似的问题,在拉了很多头发后用 SerializeArray 修复了它

    HTML

    <input type="checkbox" name="userList[]" value="<?=$userID;?>" /><?= $userName;?>
    

    jQuery

    var userList = $('input[type=checkbox]:checked').serializeArray();
    

    PHP

    $userList = $_POST['userList'];
    for($i=0;$i<sizeof($userList);$i++)
    {
        $userID = $userList[$i][value] ;
        //Insert $userID to DB
    }
    

    【讨论】:

      【解决方案3】:

      使用serialize(),因为val() 只取jquery 集合中第一个元素的值。 http://api.jquery.com/serialize/

      var postdata = $('#somediv input[type="checkbox"]').serialize();
      $.post("/somephpfile.php", postdata, function(data) {...
      

      【讨论】:

      • 如果我还想发送一个字符串“str”,如我的示例所示,我该怎么做?使用 { str: str, arr: arr } 会很好,但这会使它变得奇怪 -> &arr=serialized data
      • 然后代替seralize,做serializeArray()。然后你可以做 postdata.push({name: str, value:str}); api.jquery.com/serializeArray
      【解决方案4】:

      尝试以下方法:

              var selectedItems = [];
              $('#somediv input[type="checkbox"]:checked').each(function () {
                      selectedItems .push($(this).val());
              });
      
              var postData = { "str": str, "arr": selectedItems };
              $.ajax({
                  type: "POST",
                  url: "/somephpfile.php",
                  data: postData,
                  traditional: true,
                  success: function (data) {
                      ...
                  }
              });
      

      PS 我假设您了解序列化,但它不适合您的场景。一定要先检查一下(尽管它会序列化整个元素)。这意味着如果您的复选框没有相同的 NAME 属性,或者您需要控制它们传入的变量名称,您可以使用我的建议手动进行。

      【讨论】:

      • 您可以序列化()单个输入/选择/文本区域,只要它们在 jQuery 集合中。对于大多数人来说,做表格是最简单的。
      • 我在那里的解释很草率。编辑澄清我的意思。
      • 序列化解决了我的问题,但现在我只需要弄清楚如何用字符串发送它。但我想我知道如何
      猜你喜欢
      • 2021-06-01
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 2016-07-16
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多