我需要通过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
答案 0 :(得分:4)
您可能正在寻找.serialize
更通用的解决方案是使用包含所有参数的表单,然后将其序列化。
答案 1 :(得分:4)
遇到类似的问题,经过多次拉扯头发后,用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
}
答案 2 :(得分:1)
尝试以下方法:
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属性,或者您需要控制它们传入的变量名称,因为您可以使用我的建议手动执行此操作。
答案 3 :(得分:1)
使用serialize()
,因为val()
只获取jquery集合中第一个元素的值。
http://api.jquery.com/serialize/
var postdata = $('#somediv input[type="checkbox"]').serialize();
$.post("/somephpfile.php", postdata, function(data) {...