【问题标题】:I need to send an object from an html form as a json string, but I have a string我需要将 html 表单中的对象作为 json 字符串发送,但我有一个字符串
【发布时间】:2021-04-08 11:11:30
【问题描述】:

我尝试向我的休息控制器发送一个 ajax 请求以编辑对象用户。其中一个字段是角色列表。每个角色都有 ID 和名称,但是当我填写表格时,我将此选项作为其名称的文本放在选择字段中。这是片段:

 $.ajax({
                        url: '/api/roles/',
                        method: 'get',
                        dataType: 'json',
                        contentType: "application/json",
                        success: function (result) {
                            $('#roles').empty();
                            $.each(result, function (k, v) {
                                var option = new Option(v.name, v.name);
                                $("#roles").append(option);
                            });

                        }
                    })

当我发送表单值时,角色列表以字符串列表的形式出现,因此其余控制器创建了一个没有 id 字段的对象。修复它的最佳方法是什么?我是这样发送的:

 $.ajax({
            url: '/api/users',
            async: true,
            // dataType: 'json',
            contentType: "application/json",
            type: "PUT",
             data:
             JSON.stringify(   {
                id : jQuery('#id').val(),
                username: jQuery('#username').val(),
                password: jQuery('#password').val(),
                roles : jQuery('#roles').val()

            })

        })

【问题讨论】:

    标签: jquery json ajax rest spring-mvc


    【解决方案1】:

    您的 ajax 调用来填充选择列表

    var option = new Option(v.name, v.name);
    $("#roles").append(option);
    

    在 HTML 中创建一个选项元素,如

    <option value="name">name</option>
    

    您通过第二个 ajax 调用发送的数据包括所选选项元素的 value 属性。如果您需要“/api/users”控制器的角色 id,您只需首先设置 id。

    所以只需以类似的方式启动选项元素

    var option = new Option(v.name, v.id);
    $("#roles").append(option);
    

    你会得到

    <option value="id">name</option>
    

    这样在调用 jQuery('#roles').val() 时,您将获得 /api/users 脚本的所选角色的 id。

    【讨论】:

    • 在这种情况下,结果对象中的字段名称获取 id 值。由于某种原因,这里只能设置名称字段。
    • 这有点奇怪。但这只能是新选项调用的结果。所以我建议使用另一种方式将元素添加到选择列表中,而不是使用 Option 对象。像$('#roles').append($("&lt;option&gt;&lt;/option&gt;").attr("value", role.id).text(role.name)); 这样的东西应该可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多