javascript - 通过 ajax 以 Yii2 形式传递附加数据

标签 javascript jquery ajax yii2

我有以下提交 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() 加载模型?

最佳答案

您必须使用 namevalue 索引添加额外数据,其中 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/

相关文章:

javascript - 按类模拟点击javascript到元素

javascript - 在触发之前更改 <a> 标记的 href

javascript - 如何在 jQuery 中选择单个元素?

jquery - DatePicker 无法在 ajax 加载的页面中工作

jquery - 如何通过 Ajax 访问嵌套的 JSON 对象?

javascript - 带有复选框 'checked' 属性的信息将保存在本地存储中

javascript - Vue.js - 引用模式内的输入来更新 Firestore 数据库

javascript - 加载ajax模式时如何不重新加载

javascript - XMLHttpRequest url 包含 (&)

javascript - 根据开始和结束位置突出显示字符串中的子字符串