同时向表单提交发送jQuery.ajax数据

时间:2010-05-13 06:45:33

标签: php javascript jquery html ajax

我有点难题。我有一个有很多领域的表格。链接有一个字段,您可以在其中输入链接,单击添加按钮,链接(使用jQuery)将添加到link_array。我希望在提交表单时通过jQuery.ajax方法发送此数组。如果我使用$ .ajax发送link_array,如下所示:

    $.ajax({
        type: "POST",
        url: "add_stock",
        dataType: "json",
        data: { "links": link_array }
        });

当选择添加链接按钮时,数据没有问题到正确的位置并正确地放入数据库。如果我使用$(#stock_form).submit(.....然后发送其余的表单数据而不是link_array,将上述函数绑定到提交表单按钮。

我显然可以将链接数组传回HTML中的隐藏字段,但之后我必须将数组解压缩为逗号分隔值,并在PHP中将逗号分隔的字符串分开。在没有其他大惊小怪的情况下,在PHP中解压缩Javascript数组似乎更容易100倍。

那么,你如何使用$ .ajax并发javascript将数组发送到HTML中的其他$ _POST数据呢?

请注意我正在使用Kohana 3.0框架,但实际上这应该没有什么区别,我想要做的是将这个js数组添加到已经进行的$ _POST数组中。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您确实想要提交表单(例如,通过页面刷新等等),您唯一的选择就是在表单中添加一系列<input type='hidden'>字段,其名称为links并填写每个都有一个来自数组的值。那么你在另一端获得的内容基本上就是你通过上面的$.ajax调用获得的。

如果您只想将数据发送到服务器但实际上不需要提交表单,可以使用表单上的serialize为其获取URL编码的字符串,然后附加您的链接到字符串的结尾,并通过ajax发送。 像这样的东西

// Assuming 'link_array' is present
var data, n;

data = [$('#TheFormID').serialize()];
for (n = 0; n < link_array.length; ++n) {
    data.push("links=" + encodeURIComponent(link_array[n]));
}

$.ajax({
    type: "POST",
    url: "add_stock",
    dataType: "json",
    data: data.join("&")
});

我们从serialize获取URL编码字符串的开头,用它初始化一个数组,然后为其上的每个链接推送编码字段。然后我们使用Array#join将所有内容收集到一个字符串中,以便通过ajax调用发送。 (如果你愿意的话,你可以用字符串concat来做这件事,但是在一定数量的元素之后用数组构建这些长字符串会更快,并使整个“我是否在其上放置&”自然也会脱落。)

答案 1 :(得分:0)

使用jQuery的serializeArrayserialize function,然后添加您拥有的额外字段,最后使用.ajax提交POST数据,您将获得更好的运气。