我提交的表格是这样的:
formdata = $("#app_form").serialize()
formdata['apps'] = apps
hash = { type: "POST", url: "create_all", data: formdata }
$.ajax(hash)
formdata 帖子,但行:
formdata['apps'] = apps
完全忽略。我无法理解Coffeescript和Javascript如何完全忽略一行。非常有趣。
apps 哈希具有以下结构:
{ "a" => { "1", "2", "3" },
"b" => { "4", "5", "6" },
...
"n" => { "x", "y", "z" } }
如果:
formdata['apps'] = apps
执行后无效:
formdata = $("#app_form").serialize()
那么如何在提交之前将应用哈希添加到 formdata 哈希?
答案 0 :(得分:2)
.serialize()
返回查询字符串而不是对象,因此要在查询字符串中添加参数,请使用字符串连接
formdata += '&apps=' + encodeURIComponent(apps);
假设apps是一个字符串。
答案 1 :(得分:1)
jQuery.ajax()
例程期待一个对象(哈希),所以你根本不想序列化为一个字符串,只需拉入所有表单数据。
幸运的是,在表单数据版本.serializeArray()
之前,jQuery中有一个命令版本 - 但是,这会产生一个表单数组:
[ {'name': ..., 'value': ... }, ...]
- 不是你想要的。
因此,您可以复制它检索所有表单元素的方式,这是一个相当复杂的过滤器。或者你可以重新安排输出到你需要的输出。
你的apps
变量不能通过AJAX轻松传递,我需要先使用JSON.stringify()
转换为JSON(或其他形式的序列化)。这是现在大多数浏览器内置的,但建议使用jQuery作为备份加载json2.js
(只有在本机例程不可用时才会启用)。您可以使用本机JSON解码例程使用您使用的任何后端语言从JSON恢复apps
,几乎所有语言都可以使用它。
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 }};
答案 2 :(得分:-1)
从你所说的看起来不像有效的json和jquery数据参数需要有效的json ..
为什么不使用JSON.parse($("#app_form").serialize())