我有以下提交 Yii2 表单的 ajax 调用:
var form = $("#purchase-order-form");
$.ajax({
url: form.attr('action'),
data: form.serialize(),
type: 'post',
success: function(data) {
$('#modal').modal('hide');
callNotify(data);
}
});
这工作正常,但是我有额外的数据需要与表单数据一起传递。它是一个带有 json 编码的字符串,是我在我创建的数组中调用 JSON.stringify
创建的。
我尝试使用 .serializeArray()
而不是 .serialize()
并将附加内容推送到表单,如下所示:
var form = $("#purchase-order-form");
var table-data = tableToJson('.products-table');
var data = form.serializeArray();
data.push({table: table});
$.ajax({
url: form.attr('action'),
data: data,
type: 'post',
success: function(data) {
$('#modal').modal('hide');
callNotify(data);
}
});
当我看到控制台时,内容位于数组的末尾,但在我的 Controller 中它作为未定义传递。
我认为 yii 在让我加载它之前处理了不是来自模型的数据。
如何将数据与表单一起传递,同时仍然能够使用 $model->load()
加载模型?
最佳答案
您必须使用 name
和 value
索引添加额外数据,其中 name
包含要发布的变量的名称,并且 value
是你要追加的变量的值
{名称:'数据',值:数据}
但在我建议实际代码之前,您需要注意一些事情,您不能命名包含 -
的变量,就像您声明的那样 var table-data = tableToJson('.products -表');
Hyphens can be mistaken as subtraction attempts. Hyphens are not allowed in JavaScript names.
然后您正在分配 data.push({table: table});
而没有名称为 table
的变量。
所以你的完整代码应该是这样的
var form = $("#purchase-order-form");
var tableData = tableToJson('.products-table');
var data = form.serializeArray();
data.push({name: 'table', value:tableData});
$.ajax({
url: form.attr('action'),
data: data,
type: 'post',
success: function(data) {
$('#modal').modal('hide');
callNotify(data);
}
});
关于javascript - 通过 ajax 以 Yii2 形式传递附加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322607/