我有一个小难题。我有一个表单,其中有许多字段。有一个用于链接的字段,您可以在其中输入一个链接,单击add按钮,该链接(使用jQuery)将被添加到link_array中。我希望在提交表单时通过jQuery.ajax方法发送此数组。如果我使用$.ajax发送link_array,如下所示:
$.ajax({
type: "POST",
url: "add_stock",
dataType: "json",
data: { "links": link_array }
});当选择添加链接按钮时,数据将不会出现任何问题,并且会正确地放入数据库中。如果我使用$(#stock_form).submit(..... )将上述函数绑定到submit form按钮然后发送表单数据的其余部分,但不发送link_array。
在HTML中,我显然可以将链接数组传递回隐藏字段中,但是在PHP中,我必须将数组解压为逗号分隔的值,并将逗号分隔的字符串拆分开来。在PHP中解压Javascript数组似乎要简单100倍,而且不会有其他麻烦。
那么,如何使用$.ajax与$_POST中的其余数据并发地从javascript发送数组呢?
请注意,我使用的是Kohana3.0框架,但这不会有什么不同,我想要做的是将这个js数组添加到已有的$_POST数组中。
谢谢!
发布于 2010-05-13 14:50:59
如果您实际上想要提交表单(例如,通过页面刷新等等),那么您唯一的选择就是向表单中添加一系列名为links的<input type='hidden'>字段,并用数组中的一个值填充每个字段。那么你在另一端得到的基本上就是你通过上面的$.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调用一起发送。(如果您愿意,也可以使用string concat来实现这一点,但是使用数组构建这些长字符串在元素数量达到一定数量后会更快,并且会使整个"do I put an & on it or not“自然地消失。)
发布于 2010-05-13 15:06:16
使用jQuery的serializeArray或serialize function,然后添加额外的字段,最后使用.ajax提交帖子数据会更好一些。
https://stackoverflow.com/questions/2824887
复制相似问题