2

我正在提交这样的表格:

formdata = $("#app_form").serialize()
formdata['apps'] = apps
hash = { type: "POST", url: "create_all", data: formdata }
$.ajax(hash)

formdata发布,但行:

formdata['apps'] = apps

完全无视。我无法理解 Coffeescript 和 Javascript 是如何完全忽略一行的。很有意思。

应用程序哈希具有以下结构:

{ "a" => { "1", "2", "3" },
  "b" => { "4", "5", "6" },
  ...
  "n" => { "x", "y", "z" } }

如果:

formdata['apps'] = apps

执行后不起作用:

formdata = $("#app_form").serialize()

那么如何在提交之前将应用程序哈希添加到formdata哈希?

4

3 回答 3

2

.serialize()返回查询字符串而不是对象,因此要向查询字符串添加参数,请使用字符串连接

formdata += '&apps=' + encodeURIComponent(apps);

假设应用程序是一个字符串。

于 2012-09-21T18:54:39.327 回答
1

jQuery.ajax()例程需要一个对象(哈希),因此您根本不想序列化为字符串,只需拉入所有表单数据。

幸运的是,在表单数据版本之前,jQuery 中有一个版本的命令.serializeArray()- 但是,这会产生一个表单数组:

[ {'name': ..., 'value': ... }, ...]- 不是你想要的。

因此,您可以复制它检索所有表单元素的方式,这是一个相当复杂的过滤器。或者您可以将输出重新排列为您需要的输出。

您的apps变量不会通过 AJAX 轻松传递,我认为它需要首先转换为 JSON(或其他形式的序列化),使用JSON.stringify(). 这是现在大多数浏览器内置的,但建议json2.js使用 jQuery 作为备份加载(它仅在本机例程不可用时才使用)。apps您可以使用本机 JSON 解码例程以您使用的任何后端语言从 JSON恢复,现在几乎所有语言都有。

var formdata = { 'apps': JSON.stringify(apps) };
$.each($("#app_form").serializeArray(), function(cIndex, cEntry) {
    formdata[cEntry.name] = cEntry.value;
});

$.ajax({ type: "post",
         url: "create_all",
         data: formdata }};
于 2012-09-21T19:46:51.603 回答
-1

从你所说的看起来不像有效的json和jquery数据参数需要有效的json ..

你为什么不使用类似的东西JSON.parse($("#app_form").serialize())

于 2012-09-21T18:56:32.563 回答