如何通过AJAX发送HTML数组

时间:2011-05-03 12:17:25

标签: javascript jquery html ajax

我有这些复选框:

<input type="checkbox" name="style[]" value="1" checked="checked" />
<input type="checkbox" name="style[]" value="2" />
<input type="checkbox" name="style[]" value="3" checked="checked" />
<input type="checkbox" name="style[]" value="4" checked="checked" />
<input type="checkbox" name="style[]" value="5" />

和这个jquery处理程序:

<script type="text/javascript">
    $(document).ready(function() {
        $('.linkStyle').click(function(e) {
            // 
        });                 
    });
</script>

所以,当我点击一个复选框时,我想将数组样式[]发送到服务器运行AJAX(带有实际值)。

我该怎么做?

修改

试过:

$.post("list/browse_ajax.php", {id:"browseUpdate", actualArtist:browseArtist, actualEvent:browseEvent, actualData:browseData, style:$('#browseTableStyle:checkbox').serialize()},
    function(data) {
        $("#browseList").html(data);
    }
);  

但样式[]不发送......

编辑2 - 序列化问题

这是整个代码:

<form id="browseForm">
    <div class="wideinfo">
        <div class="content">
            <div class="tableList1">
                Style
            </div>  

            <div class="tableList2">
                <span><input type="checkbox" name="style[]" value="Style1" checked="checked" /> Style1</span>
                <span><input type="checkbox" name="style[]" value="Style2" /> Style2</span>
                <span><input type="checkbox" name="style[]" value="Style3" checked="checked" /> Style3</span>
                <span><input type="checkbox" name="style[]" value="Style4" checked="checked" /> Style4</span>
                <span><input type="checkbox" name="style[]" value="Style2" /> Style5</span>
            </div>
        </div>
    </div>
</form>

但是:

style:$('#browseForm').serialize()

它发送此信息(在Fiddler上查看)

style: style%5B%5D=Style1&style%5B%5D=Style3&style%5B%5D=Style4

不是:

style[]: Style1
style[]: Style3
style[]: Style4

最后一个是真实的/综合的HTML数组...

4 个答案:

答案 0 :(得分:4)

怎么样:

$.post('my-url', $(':checkbox').serialize(), function(data, textStatus, jqXHR){
    // my callback body
});

编辑:实际上,序列化函数仅适用于表单(因此序列化表单字段)。所以你必须在一个表单中包装你的字段。见下文。

答案 1 :(得分:2)

当您最终提交了字符串style%5B%5D=Style1&style%5B%5D=Style3&style%5B%5D=Style4时,您可以检索全面的数组:

parse_str($_POST['style'], $data);

$data变量包含:

array(
    "style" => array(
        0 => "Style1",
        1 => "Style3",
        2 => "Style4",
    )
)

它能解决你的问题吗?

答案 2 :(得分:1)

首先,你的回调似乎并不一致:

function(data) {
    $("#browseList").html(msg);
}

您可能想说:

function(data) {
    $("#browseList").html(data);
}

还要检查firebug或您的资源管理器javascript debuger,看看是否有任何错误。您还可以向我们展示实际的提交数据。 Finnaly调用的结果是什么:

$(':checkbox').serialize()

答案 3 :(得分:1)

是的,这应该有用。

style:$('#browseForm').serialize()

最后,我强烈建议您在表单中包含所有帖子数据,以便您可以这样做:

$.post('my-url', $('form').serialize(), function(data){
    $("#browseList").html(data);
});

它更干净,更直接,更易于维护。之后,您的PHP脚本应该处理其余部分。